728x90
반응형
문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
제한 조건- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
입출력 예
Strings | n | Return |
["sun", "bed", "car"] | 1 | ["car", "bed", "sun"] |
["abce", "abcd", "cdx"] | 2 | ["abcd", "abce", "cdx"] |
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings);
Arrays.sort(strings, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
if(s1.charAt(n) > s2.charAt(n)) return 1;
else if(s1.charAt(n) < s2.charAt(n)) return -1;
else return 0;
}
});
return strings;
}
}
기존에 생각했던 방법들 말고 새로운걸 도전해보고 싶어서 풀이 먼저 찾다가 발견한 Comparator.
자바의 Comparator 인터페이스를 사용하면 객체를 원하는 기준으로 정렬 할 수 있다.
compare 메소드를 오버라이드한 뒤 두 숫자를 비교해 (듀얼 피벗 퀵 정렬이 사용됨) 양수를 반환하면 s1이 s2보다 뒤에 위치해야 한다는 뜻이고, 음수를 반환하면 s1이 s2보다 앞에 위치해야 한다는 뜻이다. 0은 둘의 순서가 같다는 뜻.
문제 조건에서 문자가 같은 문자열이 여러개인 경우 사전순으로 정렬이 되어야 한다고 했으니 먼저 Arrays.sort( )로 사전순 정리를 해준다.
Arrays.sort(strings, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
if(s1.charAt(n) > s2.charAt(n)) return 1;
else if(s1.charAt(n) < s2.charAt(n)) return -1;
else return 0;
}
});
문자열의 n번째 문자를 charAt( )으로 추출하면 문자의 아스키 코드 값인 숫자가 나오게 되는데 그 숫자로 크기 비교를 해준다.
오름차순 정렬을 해야하므로 두 문자를 비교 했을 때 아스키 코드 값이 크면 뒤로 가야하기 때문에 양수를 반환해주고 작을 시 음수를 반환해준다.
🔗 출처 :
https://school.programmers.co.kr/learn/courses/30/lessons/12915?language=java
728x90
반응형
'코테 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 숫자 문자열과 영단어 Java (1) | 2024.10.02 |
---|---|
프로그래머스 - 시저 암호 Java (0) | 2024.10.01 |
프로그래머스 - 최소 직사각형 Java (0) | 2024.09.30 |
프로그래머스 - 크기가 작은 부분 문자열 Java + 원시 타입과 참조 타입 이해하기 (0) | 2024.09.27 |
프로그래머스 - 삼총사 Java (1) | 2024.09.26 |