문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
풀이 방법
문자열을 이어붙여 나가면서 크기가 더 큰지 비교하는 과정이 필요하다.
정수끼리 덧셈 연산을 하면 이어 붙여지지 않고 계산이 되기 때문에 이를 문자열로 바꾸는 과정이 먼저 필요하다.
하나의 문자연결이 아닌 여러개의 문자연결에 대한 크기 정렬을 위해서 Comparator() 함수를 이용해
커스터마이징 하는 과정이 필요하다.
기본적으로 new Comparator의 compare() 메서드는 return 값이 음수 또는 0이면 객체의 자리를 유지하고
양수인 경우 두 객체의 자리를 변경하는 특징을 가지고 있다.
기준값.compareTo(비교값);
- 기준값 == 비교값 -> 0 반환
- 기준값 > 비교값 -> 1 반환
- 기준값 < 비교값 > -1 반환
따라서 return (문자열 2+문자열 1).compareTo(문자열 1+문자열 2); 로 설정하게 된다면,
문자열 2+문자열 1의 크기가 더 크다면 두 객체의 자리를 변경한다는 뜻이다.
즉, 문자열의 위치를 변경한 값이 더 크다면 두 위치를 변경
마지막으로 numbers[] 배열이 0으로만 이루어진다면 "0", "00", "000", .... 과 같이 나타날 수 있기에
이를 하나의 "0"으로 바꿔주는 과정이 필요하다.
작성 코드
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
|
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String ch[]=new String[numbers.length];
String answer = "";
for(int i=0;i<numbers.length;i++){
ch[i]=Integer.toString(numbers[i]);
}
Arrays.sort(ch, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return (s2+s1).compareTo(s1+s2);
}
});
if(ch[0].equals("0")){
return "0";
}
for(int i=0;i<ch.length;i++){
answer+=ch[i];
}
return answer;
}
}
|
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 모의고사 (0) | 2022.01.06 |
---|---|
[프로그래머스] H-Index (0) | 2022.01.05 |
[프로그래머스] K번째수 (0) | 2022.01.04 |
[프로그래머스] 더 맵게 (0) | 2022.01.03 |
[프로그래머스] 주식가격 (0) | 2021.12.31 |