문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
return | return |
[6, 10, 2] | 6210 |
[3, 30, 34, 5, 9] | 9534330 |
문제 풀이
정렬로 쉽게 풀수 있는 문제.
문자열로 나눠서 푸는게 훨씬 쉽게 접근할 수 있을 것 같아서 문자열 배열에 넣어서 처리를 해주었다.
문자열에 담은 뒤 comparator를 통해 o2+o1과 o1+o2중 큰 수 일때를 비교해서 처리를 한뒤 모든 값이 0일때 0000이 아닌 0이 나와야하므로 이 예외처리를 해주고 이외의 경우에는 String으로 이어주면 끝나는 문제.ㅇㅅㅇ
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package algo;
import java.util.*;
class Main {
public static void main(String[] args) {
int [] numbers= {3, 30, 34, 5, 9};
int [] numbers2= {6, 10, 2};
int [] numbers3 = {0,0,0,0};
System.out.println(solution(numbers));
System.out.println(solution(numbers2));
System.out.println(solution(numbers3));
}
public static String solution(int[] numbers) {
String answer = "";
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>() {
public int compare(String o1, String o2) {
return (o2+o1).compareTo(o1+o2);
};
});
if(arr[0].equals("0")) {
answer="0";
}
else {
answer=String.join("", arr);
}
return answer;
}
}
|
cs |
https://programmers.co.kr/learn/courses/30/lessons/42746
반응형
'Algorithms > Programmers[Java]' 카테고리의 다른 글
[Programmers Level 3] 디스크 컨트롤러 (javascript) (0) | 2022.03.21 |
---|---|
[Programmers] 기능개발 [Java] (0) | 2020.09.10 |
[Programmers] 실패율(2019 KAKAO BLIND RECRUITMENT)[Java] (1) | 2020.07.24 |
[Programmers]문자열 내 마음대로 정렬하기 [Java] (0) | 2020.07.21 |
[Programmers] 폰켓몬(찾아라 프로그래밍 마에스터)[Java] (0) | 2020.07.21 |