문자열 내 마음대로 정렬하기 (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
를 적절히 활용하여 간결하게 구현할 수 있습니다.
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[LeethCode] 160번 Intersection of Two Linked Lists (0) | 2024.10.28 |
---|---|
[프로그래머스] 푸드 파이트 대회 (1) | 2024.10.16 |
[프로그래머스] k번째수 (0) | 2024.10.16 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2024.10.16 |
[프로그래머스] 가장 가까운 같은 글자 (0) | 2024.10.16 |