티스토리 뷰

728x90
반응형
문제 링크

programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

문제 풀이

정렬하는 문제였습니다.

 

처음에는 두수를 앞자리부터 한자리씩 비교해서 정렬하였으나 

 

이 방법으로는 통과하지 못하는 케이스가 있었습니다. 예)[212 , 21] 정답: 21221

 

다시 생각 해 본결과, 아예 두 수를 이어 붙여서 비교하면 둘 중에 어느 수가 먼저 이어붙였을 때 큰 수인지

 

알 수 있었습니다. 레벨 2치고 많은 생각이 필요한 문제가 아니었나 하는 생각이 듭니다.

소스 코드
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Comparator;

public class Sol {

	public static String solution(int[] numbers) {
		Comparator<String> com = new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				return Integer.compare(Integer.parseInt(o2+o1), Integer.parseInt(o1+o2));
			}
		};
        String answer = "";

		ArrayList<String> list = new ArrayList<String>();
		for(int ele : numbers) list.add(ele+"");
		list.sort(com);
		for(String ele : list) answer += ele;

        return new BigInteger(answer).toString();
    }

	public static void main(String[] args) {
//		int [] numbers = {3, 30, 34, 5, 9};
//		int [] numbers = {3, 34};
//		int [] numbers = {6, 10, 2};
		int[] numbers = { 21, 212 }; // 21221
//		int [] numbers = {1000, 0, 5, 99, 100}; //99510010000
//		int [] numbers = {0, 5, 10, 15, 20}; //52015100
//		int [] numbers = {0, 5, 10, 15, 20}; //52015100
//		int [] numbers = {0, 0, 0, 0, 0}; //0
		String ans = solution(numbers);
		System.out.println(ans);
	}

}
728x90
반응형
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함