문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.
제한 조건
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
생각
먼저 든 생각은 'Comparator을 사용하자!' 였다. Comparable와 Comparator 중 무엇을 사용할까 했는데 제한 조건중 인덱스의 문자가 같은 문자열이 있다면 사전순으로 정렬을 해야하므로 Sort함수 내에서만 적용시킬 수 있는 Comparator을 사용하기로 하였다.
new Comparator을 사용해서 정렬을 하되 만약 원하는 인덱스의 값이 같다면 그때는 일반적인 비교인 compareto함수를 사용하고 아니 경우에는 각 인덱스의 문자를 char형태로 만들어 빼서 대소를 비교하는 형태로 만들기로 하였다.
[abcd, aaaa, bbcd, afed] 를 인덱스 1로 비교하고자 할때 각 요소의 1번 인덱스는 b a b f이다. 이 경우 a b b f형태가 되는데 이 때 두번째와 세번째는 겹치므로 이 둘은 사전으로 비교를 한다면 abcd가 bbcd보다 앞에 오게 된다.
결국 [abcd, aaaa, bbcd, afed] -> [aaaa, abcd, bbcd, afed]가 될 것이다.
코드
뭐지..에디터가 바뀐이후로 code scripter가 이상하다..뭔가 어색해졌다. 에디터가 이뻐진건 엄청난 발전이지만 아직 베타버전이라 수정이 필요해보인다.
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
28
29
|
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = {};
@Override
public int compare(String arg0, String arg1) {
if(arg0.charAt(n) == arg1.charAt(n)) {
return arg0.compareTo(arg1);
}
return arg0.charAt(n) - arg1.charAt(n);
}
});
answer = new String[strings.length];
for(int i=0; i<strings.length; i++) {
answer[i] = strings[i];
}
return answer;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
'알고리즘 > 코딩 - 프로그래머스' 카테고리의 다른 글
[Java][프로그래머스][Level 1] 문자열 내림차순으로 배치하기 (0) | 2019.03.29 |
---|---|
[Java][프로그래머스][Level 1] 문자열 내 p와 y의 개수 (0) | 2019.03.28 |
[Java][프로그래머스][Level 1] 나누어 떨어지는 숫자 배열 (0) | 2019.03.25 |
[Java][프로그래머스][Level 1] 같은 숫자는 싫어! (0) | 2019.03.24 |
[Java][프로그래머스][Level 1] 가운데 글자 가져오기 (0) | 2019.03.24 |