반응형
프로그래머스 Level 2 정렬 - 가장 큰 수 (자바)
출처
programmers.co.kr/learn/courses/30/lessons/42746
문제
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를 사용하면 정말 쉽게 풀이가 가능한 문제였다.
Comparator에 익숙하지 않은 나는 찾아보고 이해하고 적용하였다.
1. 주어진 정수 배열을 문자열처럼 합해야 하기 때문에 String으로 변환한다.
2. Comparator을 사용해 정수의 조합이 큰 경우 변경되어야 하기 때문에 앞에 변경해야 하는 경우 뒤에 변경할 필요 없는 경우를 놓았다.
3. 0으로만 구성되어 있는 경우도 있을 수 있으므로 그런 경우엔 0을 return 한다.
(이 경우 때문에 테스트 케이스 하나가 계속 틀릴 것이다... 마지막 테스트 케이스가 안 되는 경우에는 이 경우를 생각해야 한다!!)
4. 정렬이 되어있는 배열을 순차적으로 더해 결과값을 반환한다.
내 코드
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
//int 배열을 String 배열로 변환
String[] arr = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
arr[i] = (String.valueOf(numbers[i]));
}
//배열 정렬, 정렬 규칙으로는 2개를 더하여 더 큰 쪽이 우선순위가 있도록 정렬
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return (s2+s1).compareTo(s1+s2);
}
});
//0000 처럼 0으로만 구성되어있으면 0 return
if (arr[0].equals("0")) return "0";
//그 외의 경우 순차적으로 연결하여 answer return
for (int i = 0; i < arr.length; i++) {
answer+=arr[i];
}
return answer;
}
}
고려할 점
1. Comparator 사용법 알기
2. 예외경우 생각하기
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 연습문제 - 124 나라의 숫자 (Java) (0) | 2020.10.27 |
---|---|
[프로그래머스] 깊이/너비 우선 탐색(DFS/BFS) - 여행경로 (Java) (0) | 2020.10.27 |
[프로그래머스] 깊이/너비 우선 탐색(DFS/BFS) - 여행 경로 (Java) (0) | 2020.10.23 |
[프로그래머스] 깊이/너비 우선 탐색(DFS/BFS) - 단어 변환 (Java) (0) | 2020.10.19 |
[프로그래머스] 2020 카카오 인턴십 - 수식 최대화 (Java) (0) | 2020.10.12 |