☕Language: Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String[] solution(String[] strings, int n) {
// 1. 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
// 2. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순 정렬
String[] answer = {};
Arrays.sort(strings, new Comparator<String>() {
public int compare(String s1, String s2) {
int result = Integer.compare(s1.charAt(n), s2.charAt(n));
if (result == 0) {
result = s1.compareTo(s2);
}
return result;
};
});
return strings;
}
}
|
🤔 해설
1. new Comparator<String>() { ... }
- 정렬 기준 Overriding
2. int result = Integer.compare(s1.charAt(n), s2.charAt(n));
- index위치에 따른 1차 비교
3. if (result == 0) { ... }
- 사전순 2차 비교
😮 이 외의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
class Solution {
public String[] solution(String[] strings, int n) {
// 1. 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
// 2. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순 정렬
String[] answer = {};
List<String> list = new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
list.add(strings[i].charAt(n) + strings[i]);
}
Collections.sort(list);
answer = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).substring(1, list.get(i).length());
}
return answer;
}
}
|
1. list.add(strings[i].charAt(n) + strings[i]);
- 1차 정렬대상을 문자열 앞에 추가
2. answer[i] = list.get(i).substring(1, list.get(i).length());
- 결과값 return 전 추가한 문자열 제거
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Solution {
public String[] solution(String[] strings, int n) {
// 1. 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
// 2. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순 정렬
List<String> list = Arrays.asList(strings);
list.sort((a, b) -> {
int result = (a.split(""))[n].compareTo((b.split(""))[n]);
if(result == 0)
return a.compareTo(b);
return result;
});
return list.toArray(new String[0]);
}
}
|
1. List<String> list = Arrays.asList(strings);
- List → Arrays
2. int result = (a.split(""))[n].compareTo((b.split(""))[n]);
- 문자열을 문자 단위로 쪼개서 배열로 변환
3. return list.toArray(new String[0]);
- Arrays → List
- new String[0]: 매개변수로 배열의 타입을 지정
- toArray: List의 크기에 따라 필요한 크기의 새 배열을 생성
🔗 소스 코드
GitHub
📚 참고 자료
'Computer > Algorithm_Java' 카테고리의 다른 글
[BaekJoon] 15651번 N과 M (3) 문제 풀이 (Success) (0) | 2023.09.26 |
---|---|
[BaekJoon] 13909번 창문 닫기 문제 풀이 (Success) (0) | 2023.09.23 |
[Programmers] 두 정수 사이의 합 (Success) (0) | 2023.09.21 |
[BaekJoon] 15650번 N과 M (2) 문제 풀이 (Success) (0) | 2023.09.20 |
[Programmers] 나누어 떨어지는 숫자 배열 (Success) (0) | 2023.09.19 |