-
프로그래머스 가장 큰 수(자바) - 정렬코딩테스트 2022. 4. 7. 17:33
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
[6, 10, 2] "6210" [3, 30, 34, 5, 9] "9534330" 처음에는 그냥 numbers를 string 배열로 바꾼 후 Arrays.sort를 했다.
하지만 이렇게 하니까 9534330이 아니라 9534303 이렇게 정렬되었다.
그래서 Comparator를 사용하여 두 문자열을 붙여서 비교한 후 그 값을 바탕으로 내림차순으로 정렬하도록 구현했다.
import java.util.*; class Solution { public String solution(int[] numbers) { String answer = ""; String[] numString = new String[numbers.length]; for (int i = 0 ; i < numbers.length; i++) { numString[i] = Integer.toString(numbers[i]); } Arrays.sort(numString, new Comparator<String>() { public int compare(String o1, String o2) { return ((o2+o1).compareTo(o1+o2));//내림차순 //오름차순 = (o1+o2).compareTo(o2+o1) } }); if(numString[0].equals("0")) return "0"; for (String str : numString) { answer += str; } return answer; } }
'코딩테스트' 카테고리의 다른 글
프로그래머스 조이스틱(탐욕법 Greedy) - 자바 ** (0) 2022.04.12 프로그래머스 k번째 수(자바) - 정렬 -> 배열 복사 주의! (0) 2022.04.10 프로그래머스 H-index (자바) - 정렬 (0) 2022.04.07 프로그래머스 주식가격(자바) - 스택** (0) 2022.04.07 프로그래머스 다리를 지나가는 트럭(자바) - 큐** (0) 2022.04.06