문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.
예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
예제:
Input:
strings : ["sun", "bed", "car"], n : 1
Output:
["car", "bed", "sun"]
Input:
strings : ["abce", "abcd", "cdx"], n : 2
Output:
["abcd", "abce", "cdx"]
제한 조건:
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
Solution #1
import java.util.Arrays;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, (o1, o2) -> {
if (o1.charAt(n) > o2.charAt(n)) return 1;
else if (o1.charAt(n) < o2.charAt(n)) return -1;
return o1.compareTo(o2);
});
return strings;
}
}
Result #1
💡 Comparator 인터페이스의 compare() 함수를 오버라이드해서 재정의하였다.
Solution #2
import java.util.Arrays;
class Solution {
public String[] solution(String[] strings, int n) {
for (int i = 0; i < strings.length; i++) {
strings[i] = strings[i].charAt(n) + strings[i];
}
Arrays.sort(strings);
for (int i = 0; i < strings.length; i++) {
strings[i] = strings[i].substring(1);
}
return strings;
}
}
Result #2
💡 기존 배열 값에서 인덱스 n번째 글자를 첫번째에 붙이고, Arrays.sort() 로 정렬했다. 정렬한 후, substring()으로 첫번째 글자를 제거하니 최악의 실행 시간이 나왔다.
More Algorithm!
👇👇
github.com/ggujangi/ggu.programmers
출처 : 프로그래머스
'프로그래머스 - JAVA > Level 1' 카테고리의 다른 글
[JAVA] 프로그래머스 Lv.1 : 나누어 떨어지는 숫자 배열 (0) | 2021.04.04 |
---|---|
[JAVA] 프로그래머스 Lv.1 : 두 정수 사이의 합 (0) | 2021.04.04 |
[JAVA] 프로그래머스 Lv.1 : 문자열 내림차순으로 배치하기 (0) | 2021.04.03 |
[JAVA] 프로그래머스 Lv.1 : 서울에서 김서방 찾기 (0) | 2021.04.03 |
[JAVA] 프로그래머스 Lv.1 : 수박수박수박수박수박수? (0) | 2021.04.03 |