문제
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
나의 코드
import java.util.*;
public class LargestNumber {
public static String solution(int[] numbers) {
String answer = "";
String[] arr = new String[numbers.length];
for(int i=0; i<arr.length; i++) {
arr[i] = numbers[i]+"";
}
Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
if(arr[0] == "0") return "0";
for(String ans : arr) {
answer+=ans;
}
return answer;
}
}
나의 풀이
처음 접근을 잘못했던 문제다....
예를 들어 3과 32 , 3과 34 를 int로 비교하려니까 10으로 나머지 구하고 몫 구하고 아주 난리가 났었다.
이건 백퍼 시간초과 느낌이어서 정렬 문제는 시간 복잡도가 O(n log n) 안으로 해결해야되기 때문에 다시 생각했다.
그래서 얻은 힌트 String값 비교
1. 먼저 새로운 String array를 numbers의 크기로 할당한다.
2. for문을 통해서 +""를 한 String값을 array에 넣는다.
3. Arrays.sort 를 통해 o1, o2를 더한 값으로 비교를 한다. (이유는 3과 32를 비교했을 때 3을 우선순위에 놔야 하기 때문)
4. 정렬된 수 중 첫번째 인덱스가 0이면 결국은 0이라는 것이라서 return 0
5. for문을 통해 arr에 저장된 값을 answer에 +=로 저장한다.
6. answer return
'코딩테스트 풀이 > 프로그래머스' 카테고리의 다른 글
완전탐색 - 모의고사 [JAVA] (0) | 2020.06.07 |
---|---|
정렬 - H-Index [JAVA] (0) | 2020.06.05 |
정렬 - K번째수 [JAVA] (0) | 2020.06.03 |
힙 - 우선순위큐 [JAVA] (0) | 2020.06.02 |
힙 - 디스크 컨트롤러 [JAVA] (0) | 2020.06.01 |