문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
정답 코드 (남이 작성한 코드)
import java.util.*;
class Solution {
public String solution(int[] numbers) {
// 결과를 저장할 StringBuilder를 생성
StringBuilder sb = new StringBuilder();
// int 배열을 String 배열로 변환
String[] stringNums = Arrays.stream(numbers)
.mapToObj(String::valueOf)
.toArray(String[]::new);
// 문자열을 더한 값이 큰 순서대로 정렬(내림차순)
Arrays.sort(stringNums, (a, b) -> (b + a).compareTo(a + b));
// 만약 가장 큰 값이 "0"인 경우
if (stringNums[0].equals("0")) {
// "0" 반환
return "0";
}
// 반복문을 활용하여 정렬된 문자열 순서대로 이어 붙이기
for (String s : stringNums) {
sb.append(s);
}
// StringBuilder 값을 String으로 변환
String answer = sb.toString();
// answer 반환
return answer;
}
}
문제 풀이
문제는 간단했지만 알고리즘을 만드는데, 꽤 오랜 시간 고민 했고, 결국 풀지 못 했다. 다른 사람들의 풀이를 보니 comparator를 이용해서 풀었는데, 이를 분석하며 공부하여, 다음에 비슷한 문제를 마주했을 때는 제대로 풀어봐야겠다.
// 문자열을 더한 값이 큰 순서대로 정렬(내림차순)
Arrays.sort(stringNums, (a, b) -> (b + a).compareTo(a + b));
핵심 코드는 위 코드인데,
Arrays.sort(stringNums, comparator);
comparator로 (a, b) -> (b + a).compareTo(a + b)가 들어간 코드이다. 이 코드가 돌아가는 예시를 보자.
int[] numberString = {"3", "30", "34"}
Arrays.sort(numberString, (a, b) -> (b + a).compareTo(a + b));
위와 같이 코드를 실행하면
1. 3과 30 비교
2. 330(a+b), 303(b+a)
3. (a+b) > (b+a) 이므로 3, 30 순으로 정렬
4. 3과 34 비교
5. 334(a+b), 343(b+a)
6. (a+b) < (b+a) 이므로 34, 3 순으로 정렬
7. 결과 = {"34","3","30"}
'자료구조 & 알고리즘 > 문제 풀이 (프로그래머스)' 카테고리의 다른 글
| 소수 찾기 (DFS) (0) | 2026.06.24 |
|---|---|
| 삼각 달팽이 (델타 배열) (0) | 2026.06.23 |
| 다리를 지나가는 트럭 (큐) (0) | 2026.06.19 |
| 롤케이크 자르기 (0) | 2026.06.18 |
| 뒤에 있는 큰 수 찾기 (0) | 2026.06.17 |
