https://programmers.co.kr/learn/courses/30/lessons/42746?language=java
풀이 과정
- 핵심은 정렬하기 전에 숫자를 반복해서 4자리로 맞추어주는 것이다. 맞추어주지 않고 정렬한다면 값 자체로 큰 값 순서대로 정렬이 되기 때문이다.
- 1 -> 1111, 2 -> 2222, 10 -> 1010, ...
- 따라서, 반복해서 만들어 준 숫자, 실제 숫자를 저장하는 클래스를 만들어 준 다음, 입력받은 numbers의 값들을 클래스로 매핑해서 리스트로 저장한다.
- 다음으로 반복해서 만들어 준 숫자 기준으로 내림차순 정렬한다.
- 정렬된 리스트를 기준으로, 하나씩 실제 숫자를 꺼내서 정답 문자열에 붙여준다. 단, 이 때 맨 앞자리가 0인 경우는 0을 출력시켜 주면 된다.
- 0이 3번 나온 경우 000 리턴이 아닌 0 리턴임에 유의!!
소스 코드
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Element {
int value;
int realValue;
public Element(int realValue, int value) {
this.realValue = realValue;
this.value = value;
}
}
class Solution {
public String solution(int[] numbers) {
String answer = "";
List<Element> elementList = Arrays.stream(numbers)
.mapToObj(n -> {
String numStr = Integer.toString(n);
int idx = 0;
int value = 0;
while (idx < 4) {
value *= 10;
value += (Character.digit(numStr.charAt((idx++) % numStr.length()), 10));
}
return new Element(n, value);
})
.collect(Collectors.toList());
elementList.sort((p1, p2) -> {
return -Integer.compare(p1.value, p2.value);
});
for (Element e : elementList) {
answer += e.realValue;
}
if (answer.charAt(0) == '0')
return "0";
return answer;
}
}
'알고리즘[Java] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 튜플 (0) | 2022.01.29 |
---|---|
[ Lv 2 ] 짝지어 제거하기 (0) | 2022.01.28 |
[ Lv 3 ] [ DP ] 보행자 천국 (0) | 2021.12.21 |
[ Lv 2 ] [ BackTracking ] 단체사진 찍기 (0) | 2021.12.19 |