https://programmers.co.kr/learn/courses/30/lessons/12915
방법 1: 맨 처음에 낸 답안
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
|
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// n번째 문자를 기준으로 오름차순 정렬
int result = (o1.charAt(n) + "").compareTo(o2.charAt(n) + "") ;
// n번째 문자가 일치한다면, 문자열 전체를 기준으로 오름차순 정렬
if (result == 0) {
return o1.compareTo(o2);
}
return result;
}
});
return strings;
}
}
Colored by Color Scripter
|
방법 2: 아이디어에 감명받은 다른 분 답안
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
// 배열 각 요소의 n번째 자리를 앞에붙여 list에 추가
ArrayList<String> arr = new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
arr.add("" + strings[i].charAt(n) + strings[i]);
}
// 오름차순 정렬
Collections.sort(arr);
// 정렬된 list -> int배열
String[] answer = new String[arr.size()];
for (int i = 0; i < arr.size(); i++) {
answer[i] = arr.get(i).substring(1, arr.get(i).length());
}
return answer;
}
}
Colored by Color Scripter
|
방법 3: 방법 2에 영감을 받아서 방법1을 수정한 답안
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// n번째 문자를 맨 앞에 붙인 문자열로 오름차순 정렬
return (o1.charAt(n) + o1).compareTo(o2.charAt(n) + o2);
}
});
return strings;
}
}
Colored by Color Scripter
|
방법1이 가장 빠르고, 방법2 와 3이 비슷하다.
방법 3은 보기엔 깔끔하지만 속도는 떨어지는 것 같다.
인덱스 n의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
방법 2를 구현하신 분은 이 문구를 잘 응용한 것이다.
n번째 문자 -> 전체문자 순으로 우선순위를 가지니,
아예 n번째 문자를 문자열 맨 앞에 붙여버리기... o u ya
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스]연습문제 : 문자열 내림차순으로 배치하기 (level 1) (0) | 2019.11.06 |
---|---|
[프로그래머스]연습문제 : 문자열 내 p와 y의 개수 (level 1) (0) | 2019.11.06 |
[프로그래머스]연습문제 : 두 정수 사이의 합 (level 1) (0) | 2019.11.06 |
[프로그래머스]연습문제 : 나누어 떨어지는 숫자 배열 (level 1) (0) | 2019.11.06 |
[프로그래머스]연습문제 : 같은 숫자는 싫어 (level 1) (0) | 2019.11.06 |
댓글