[프로그래머스 - 정렬] 가장 큰수

2020. 1. 27. 23:39·Algorithm

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42746

 

문제 설명


0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.


 
제한사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.


예제 #1

input [6, 10, 2] return : "6210"


시행착오 

  1. 완전 탐색으로 풀면 시간 초과 에러가 발생한다.
  2. 0으로 패딩하거나 9로 패딩하여 자리수를 맞춰주어도 예외 케이스가 발생함.


풀이 순서

  1. numbers 배열내 숫자를 String으로 변환("6"+"10" = "610"을 만들기 위함, 물론 곱하기를 해도되지만...)
  2. Comparator 함수를 이용해 정렬 대상(o1, o2)를 o1+o2, o2+o1로 비교하여 큰수가 나오는 대상을 앞으로
  3. 0000000으로 나오는 결과는 "0"으로 예외처리
import java.util.*;
class Solution {
    
    static int max_size = 0;
    public String solution(int[] numbers) {
        String answer = "";
        
        ArrayList<String> list = new ArrayList<>();
        for(int i=0; i<numbers.length; i++){
            String tmp = numbers[i] + "";
            list.add(tmp);
            max_size = Math.max(max_size, tmp.length());
        }
        
        Collections.sort(list, new Comparator<String>(){
           @Override
            public int compare(String o1, String o2) {
                // TODO Auto-generated method stub
                int cmp1 = Integer.parseInt(o1+o2);
                int cmp2 = Integer.parseInt(o2+o1);
                
                if(cmp1> cmp2){
                    return -1;
                }else if(cmp2> cmp1){
                    return 1;
                }
                return 0;
            }
        });
        
        if(list.get(0).equals("0")){
            return "0";
        }else{
            for(int i=0; i<list.size(); i++){
                answer += list.get(i);
            }
            return answer;
        }
    }
    
}

'Algorithm' 카테고리의 다른 글

[프로그래머스 - 힙(Heap)] 디스크 컨트롤러  (0) 2020.01.28
[프로그래머스 - 정렬] H-Index  (0) 2020.01.27
[프로그래머스 - 스택/큐] 다리를지나는트럭  (0) 2020.01.27
[프로그래머스 - 해시] 베스트앨범  (0) 2020.01.27
[프로그래머스 - 완전탐색] 숫자야구  (0) 2020.01.27
'Algorithm' 카테고리의 다른 글
  • [프로그래머스 - 힙(Heap)] 디스크 컨트롤러
  • [프로그래머스 - 정렬] H-Index
  • [프로그래머스 - 스택/큐] 다리를지나는트럭
  • [프로그래머스 - 해시] 베스트앨범
hj_.
hj_.
  • hj_.
    기술 블로그
    hj_.
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Algorithm
      • Side Project
        • PCA 자격증 준비
        • Flutter
        • Vue
      • Flutter
      • Kubernetes
      • 온라인 비즈니스
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Linkedin
    • Github
  • 공지사항

  • 인기 글

  • 태그

    MySQL환경 구축
    프로그래머스
    워드프레스세팅
    Range query)
    GCP
    VM INSTANCE
    서버 환경 구축
    Full text query
    boj17136
    GCP MySQL
    H-index
    UpdraftPlus
    디스크 컨트롤러
    Wordfence
    베스트앨범
    Deploy and Manage Cloud Environments with Google Cloud
    pagespeedinsight
    hosting.kr
    java
    완전탐색
    elasticsearch
    Challenge Lab 2
    microk8s
    PCA 자격증
    가장 큰수
    소수찾기
    색종이붙이기
    페이지 속도
    다리를 지나는 트럭
    가벼운 테마
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hj_.
[프로그래머스 - 정렬] 가장 큰수
상단으로

티스토리툴바