-
[프로그래머스] 가장 큰 수ALGORITHM/PROGRAMMERS 2021. 8. 2. 12:07
https://programmers.co.kr/learn/courses/30/lessons/42746
2021-08-02
1234567891011121314151617181920import java.util.*;class Solution {public String solution(int[] numbers) {StringBuilder answer = new StringBuilder();String[] arr = new String[numbers.length];for(int i = 0; i < numbers.length; i++) arr[i] = String.valueOf(numbers[i]);Arrays.sort(arr, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return (o2+o1).compareTo(o1+o2); //내림차순}});if(arr[0].equals("0")) return "0";for(String str: arr) answer.append(str);return answer.toString();}}cs #문제풀이
문제를 대충 봤을 때 그냥 다 돌려야지 생각했었다; 그냥 돌리면 터진다...
다행히도? 규칙을 발견했는데, 숫자를 숫자로 보면 안되고 문자로 봐야한다.
1번 예제 같은 경우, [6, 10, 2] 인데 숫자로 보면 당연히 10 > 6 > 2 지만 문자로 보면 6 > 2 > 10 으로 둘 수 있다.
2번 예제 같은 경우, [3, 30, 34, 5, 9] 인데 9 > 5 는 명확한데 34, 30, 3은 어떻게 정렬해야할지 고민이 됐다.
결론적으로는 34 > 3 > 30으로 정렬이 되는데, 이는 두 문자열을 더해보면 된다.
[34, 3] 의 경우 : 34+3 = 343 or 3+34 = 334 이니깐, 34 > 3 으로 정렬 된다.
[3, 30]의 경우 : 3 + 30 = 330 or 30 + 3 = 303 이니깐, 3 > 30 으로 정렬 된다.
내림차순으로 정렬해야해서 o2.compareTo(o1)을 리턴하면 된다. (대신 덧셈(o2+o1)으로 표현)
+) 11번 테스트 케이스 틀렸는데 전부 0인 경우 [0, 0, 0, 0]를 생각을 못했다; ;
정렬 후 첫번째값이 0이 나오면 전부 0이라는 의미이므로 그냥 "0"을 리턴하면 된다.
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 조이스틱 (0) 2021.08.03 [프로그래머스] 큰 수 만들기 (0) 2021.08.02 [프로그래머스] 가장 큰 정사각형 찾기 (0) 2021.08.02 [프로그래머스] 삼각 달팽이 (0) 2021.08.01 [프로그래머스] 땅따먹기 (0) 2021.08.01