반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42746
풀이
이번 문제도 풀이를 봤다.. 내 알고리즘 실력은 언제쯤 성장할 것인가..
우선 int 형의 numbers 변수를 String 형태로 변환해야하는 것은 알고 있었다. 하지만 아무리 생각해도 어떤식으로 숫자를 비교하면서 정렬해야하는지 감이 잡히지 않았다.
다른 분들의 풀이를 봤더니 Comparator 클래스를 이용해서 첫 번째 인자와 두 번째 인자를 비교해서 문제를 해결했다. 1번 예제의 경우 6, 10, 2가 있을 때 인접한 인자 두 개를 가져와서 순서를 바꾼 후 덧셈을 비교한다. 6+10 = 610 과 10+6 = 106을 비교해서 자리를 바꾸거나 그대로 둔다.
이렇게 하는 이유는 2번 예제에서 나온다. [9, 5, 34, 30, 3] 에서 30과 3을 비교해보면 3보다 30이 더 크기 때문에 330이 아닌 303으로 정렬된다. 그렇기 때문에 n1+n2 와 n2+n1을 비교 후에 내림차순으로 정렬해주어야한다.
또한 numbers의 원소가 0으로만 이루어졌을 경우를 대비해서 내림차순 정렬을 완료했을 때 맨 앞의 인자가 0이면 return 0을 해준다.
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String solution(int[] numbers) {
String answer = "";
String[] strNum = new String[numbers.length];
// 문자열로 변환
for (int i=0; i<numbers.length; i++) {
strNum[i] = String.valueOf(numbers[i]);
}
// 정렬 (내림차순)
Arrays.sort(strNum, new Comparator<String>() {
public int compare(String o1, String o2) {
return (o2+o1).compareTo(o1+o2);
}
});
// 0이 맨 앞에 나오면 return 0
if (strNum[0].equals("0")) {
return "0";
} else {
for (String str : strNum) {
answer += str;
}
}
return answer;
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]JAVA - Level1. 최소직사각형 (0) | 2022.09.03 |
---|---|
[프로그래머스]JAVA - Level1. 같은 숫자는 싫어 (0) | 2022.09.01 |
[프로그래머스]JAVA - Level2. 기능 개발 (0) | 2022.08.30 |
[프로그래머스]JAVA - Level3. 코딩 테스트 공부 (2) | 2022.08.29 |
[프로그래머스]JAVA - Level1. 성격 유형 검사하기 (0) | 2022.08.27 |