프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제

제출한 코드
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, (s1, s2) -> {
if (s1.charAt(n) == s2.charAt(n))
return s1.compareTo(s2);
else return s1.charAt(n) - s2.charAt(n);
});
return strings;
}
}
풀이
접근 방식을 잘 모르겠어서 구글링을 먼저 했다. 많은 풀이 방식이 나왔는데, 그 중에서 comepareTo() 메서드를 사용한 풀이를 선택해서 제출했다.
Arrays.sort() 는 기본적으로 오름차순으로 정렬된다.
아래 코드에서 볼 수 있듯이 첫 번째 인자에는 정렬하고 싶은 배열을, 두 번째 인자에는 Comparator를 넣을 수 있다.
public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
때문에 두 번째 인자에서 (s1, s2) 를 기준으로 두 문자열을 비교하는 코드를 작성했다.
비교하려는 두 문자열의 n번째 문자가 같으면 s1.compareTo(s2) 로 전체 문자열을 비교한 후 결과값을 반환하도록 했다.
comepareTo() 메서드는 두 값을 비교해서 같으면 0, s1이 사전상 먼저 오게 되면 음수를, 그렇지 않으면 양수를 반환한다.
만약 두 문자열의 n번째 문자가 다르면 s1.charAt(n) - s2.charAt(n) 값을 반환한다.
이때 return 값이 0이면 순서를 유지하게 되고, 음수가 반환되면 s1이 앞에 위치하게 되며, 양수가 반환되면 s2가 앞에 위치하게 되어서 최종적으로는 오름차순으로 배열이 정렬된다.
'프로그래머스' 카테고리의 다른 글
| [프로그래머스] 68644번 - 두 개 뽑아서 더하기 [Java] (0) | 2026.05.15 |
|---|---|
| [프로그래머스] 42748번 - K번째수 [Java] (0) | 2026.05.13 |
| [프로그래머스] 81301번 - 숫자 문자열과 영단어 [Java] (0) | 2026.05.11 |
| [프로그래머스] 12926번 - 시저 암호 [Java] (0) | 2026.05.08 |
| [프로그래머스] 12930번 - 이상한 문자 만들기 [Java] (0) | 2026.05.04 |