문자열 내 마음대로 정렬하기 (Java)
문제 설명
주어진 문자열 리스트 strings와 정수 n을 기준으로 각 문자열의 n번째 인덱스에 위치한 문자를 기준으로 오름차순 정렬하는 문제입니다. 만약 n번째 문자가 동일한 문자열이 여럿 있을 경우, 그 문자열들은 사전순으로 정렬합니다.
문제 조건
strings는 길이 1 이상, 50 이하의 배열입니다.strings의 각 원소는 소문자 알파벳으로 이루어져 있습니다.strings의 각 문자열은 길이 1 이상, 100 이하입니다.- 모든
strings의 원소의 길이는n보다 큽니다.
입출력 예시
예시 1
- 입력:
strings = ["sun", "bed", "car"], n = 1 - 출력:
["car", "bed", "sun"]
설명: 각 문자열의 1번째 인덱스 문자를 기준으로 보면 "sun"의 u, "bed"의 e, "car"의 a가 됩니다. 이를 기준으로 오름차순으로 정렬하면, "car", "bed", "sun" 순으로 배열됩니다.
예시 2
- 입력:
strings = ["abce", "abcd", "cdx"], n = 2 - 출력:
["abcd", "abce", "cdx"]
설명: 각 문자열의 2번째 인덱스 문자를 기준으로 보면 "abce"와 "abcd"는 둘 다 c, "cdx"는 x입니다. 먼저 "cdx"는 가장 뒤에 위치하고, "abce"와 "abcd"는 사전순으로 비교하여 "abcd"가 앞에 옵니다.
Java 코드 구현
package lv1.문자열내마음대로정렬하기;
import java.util.Arrays;
import java.util.Comparator;
public class Solution {
// 문자열을 n번째 문자를 기준으로 정렬하는 함수
static String[] solution(String[] strings, int n){
// Arrays.sort를 사용하여 문자열 배열을 정렬
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// 1. n번째 문자가 같으면 사전순으로 비교
if (o1.charAt(n) == o2.charAt(n)) {
return o1.compareTo(o2); // 사전순 비교
} else {
// 2. n번째 문자가 다르면 해당 문자를 기준으로 비교
return o1.charAt(n) - o2.charAt(n); // n번째 문자로 비교
}
}
});
return strings;
}
public static void main(String[] args) {
var main = new Solution();
// 예시 테스트
System.out.println(Arrays.toString(main.solution(new String[]{"sun", "bed", "car"}, 1)));
System.out.println(Arrays.toString(main.solution(new String[]{"abce", "abcd", "cdx"}, 2)));
}
}
코드 설명
1. Arrays.sort() 메서드
Java의 Arrays.sort() 메서드는 배열을 정렬할 때 사용됩니다. 여기서는 Comparator<String>을 사용하여 각 문자열의 n번째 인덱스에 있는 문자를 기준으로 비교합니다.
2. Comparator의 compare 메서드
이 코드에서 핵심은 compare 메서드입니다.
- 먼저 두 문자열의 n번째 문자를 비교합니다.
- 만약
o1과o2의 n번째 문자가 같다면, 사전순으로 비교하기 위해o1.compareTo(o2)를 사용합니다. - n번째 문자가 다르면, 해당 문자를 기준으로 비교하여 정렬합니다.
- 만약
3. 문자열 사전순 정렬
compareTo() 메서드는 두 문자열을 사전순으로 비교합니다. 따라서 n번째 문자가 같을 경우, 문자열 전체를 사전순으로 정렬할 수 있습니다.
입출력 예 설명
예시 1
- 입력:
["sun", "bed", "car"], n = 1 - 각 문자열의 1번째 인덱스 문자:
"sun"→'u'"bed"→'e'"car"→'a'
이제 각 문자를 오름차순으로 정렬하면 "car", "bed", "sun"의 순서가 됩니다.
예시 2
- 입력:
["abce", "abcd", "cdx"], n = 2 - 각 문자열의 2번째 인덱스 문자:
"abce"→'c'"abcd"→'c'"cdx"→'x'
먼저 "cdx"가 가장 뒤에 위치하게 됩니다. "abce"와 "abcd"는 2번째 문자가 같으므로, 전체 문자열을 사전순으로 정렬하여 "abcd", "abce"의 순서가 됩니다.
결론
이 알고리즘은 문자열 배열을 주어진 인덱스 n에 위치한 문자를 기준으로 정렬하고, 문자가 같을 경우에는 사전순으로 정렬합니다. Java의 Arrays.sort()와 Comparator를 적절히 활용하여 간결하게 구현할 수 있습니다.
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
| 누적 합(Prefix Sum) 개념과 구간 합 구하기 (2) | 2025.08.18 |
|---|---|
| [LeethCode] 160번 Intersection of Two Linked Lists (0) | 2024.10.28 |
| [프로그래머스] 푸드 파이트 대회 (1) | 2024.10.16 |
| [프로그래머스] k번째수 (0) | 2024.10.16 |
| [프로그래머스] 숫자 문자열과 영단어 (0) | 2024.10.16 |