가다파하 2020. 11. 2. 00:02

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

 

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

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

programmers.co.kr

 

1) 문제 풀이

  • 주어진 numbers의 데이터를 10으로 나누어서 나머지 값별 데이터로 데이터를 정렬한다.  TreeMap<나머지값, 해당 데이터들>
  • Map의 Value들을 내림차순으로 정렬한다.
  • 정렬된 value들을 순서대로 하나씩 string 형태의 데이터로 이어 붙인다.

 

2) 구현 코드

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        TreeMap<Integer, List<Integer>> sortedMap = new TreeMap<Integer, List<Integer>>(Collections.reverseOrder());
		
		for(int number : numbers) {
			int namege = number % 10;
			List<Integer> list = sortedMap.get(namege);
			if(list == null) {
				list = new ArrayList<Integer>();
				sortedMap.put(namege, list);
			}
			list.add(number);
		}
		
		for(int namege : sortedMap.keySet()) {
			sortedMap.get(namege).sort(new Comparator<Integer>() {

				@Override
				public int compare(Integer o1, Integer o2) {
					if(o1 > 02) {
						return -1;
					}else {
						return 1;
					}
				}
			});
		}
        
        for(List<Integer> value : sortedMap.values()) {
			for(int v : value) {
				answer += v +"";
			}
		}
        return answer;
    }
}

* 201101 테스트 코드는 통과하는데 제출하면 0점이당..... 

다른 방법을 일단 생각해 봐야겠다.