문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
numbers | return |
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
문제 풀이
이 문제의 함정은
1. 단순히 배열을 문자열로 바꾸고 내림차순으로 정렬했을 때 3 보다 30이 먼저 오는 것
2."000" 과 같이 마무리 되었을 때 입니다.
1번 함정을 해결하기 위해선 Java의 경우 Arrays.sort에서 new Comparator를 통해 뒤압(s2+s1)을 합친 문자열과 앞뒤(s1+s2)를 합친 문자열을 비교하는 조건을 주시면 해결하실 수 있습니다.2번의 경우 삼항 연산자를 통해 합친 문자열의 첫번째 시작이 0인 경우 0을 반환하게끔 설정해주시면 됩니다.
풀이 코드
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String[] nums = new String[numbers.length];
for(int i=0; i<numbers.length; i++)
nums[i] = String.valueOf(numbers[i]);
Arrays.sort(nums, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
return (s2+s1).compareTo(s1+s2);
}
});
String answer = "";
for(String num : nums) answer += num;
return answer.charAt(0) == '0' ? "0" : answer;
}
}
<출처>
https://programmers.co.kr/learn/courses/30/lessons/42746
반응형
'프로그래머스 > Level2' 카테고리의 다른 글
[프로그래머스][Java] 소수 찾기 (0) | 2022.02.26 |
---|---|
[프로그래머스][Java] H-Index (0) | 2022.02.26 |
[프로그래머스][Java] 주식가격 (0) | 2022.02.25 |
[프로그래머스][Java] 다리를 지나는 트럭 (0) | 2022.02.25 |
[프로그래머스][Java] 프린터 (0) | 2022.02.25 |
댓글