⏱소요 시간 - 2시간 동안 삽질 (실패)
🔑해결 방법
다른 사람들의 풀이를 찾아보니 Comparator / Comparable을 사용하는 문제였다.
인강 들을 때, 이해가 잘 안가서 나중에 쓸때 다시 봐야지 했었는데 바로 나와버려서 다시 정리했다.
다음에 또 이런 문제가 나오면 적용해보자.
Comparator 인터페이스를 구현하여 정렬 메서드를 정의하는 방법은 아래와 같다.
Arrays.sort(정렬할 배열, new Comparator<배열 타입>(){
@Override
public int compare(Object o1, Object o2) { // 배열 요소를 하나씩 돌면서 비교하자
// 정렬 로직 자유롭게 구현
// 리턴 형태도 자유롭게 구현
return o1.compareTo(o2); // 기본 오름차순 정렬할 때
return o1.compareTo(o2) * -1; // 내림차순 정렬할 때
return o2.compareTo(o1); // 내림차순 정렬할 때
}
}
🔎소스 코드
같으면 0, 비교하는 값이 크면 1, 비교하는 값이 더 작으면 -1을 반환하면서
return 값의 결과에 따라 compare() 메서드가 자동으로 정렬을 해준다.
package step1;
import java.util.Arrays;
import java.util.Comparator;
// 문자열 내 마음대로 정렬하기
public class Ex13 {
public static void main(String[] args) {
System.out.println(solution(new String[]{"sun", "bed", "car"} , 1));
System.out.println(solution(new String[]{"abce", "abcd", "cdx"} , 2));
}
public static String[] solution(String[] strings, int n) {
String[] answer = new String[strings.length];
// 조건 중 같은 문자열이 여럿 일 경우 사전순으로 나열하기 위해
// 미리 strings 배열을 사전순으로 정렬한 상태에서 비교를 시작
Arrays.sort(strings);
System.out.println(Arrays.toString(strings)); // [bed, car, sun]
// 입력받은 n번 인덱스의 문자들 비교
// Comparator를 익명 클래스로 구현
Arrays.sort(strings, new Comparator<String>() { // strings[]를 돌면서
@Override
public int compare(String o1, String o2) { // 문자들을 서로 비교하자
String s1 = o1.substring(n, n + 1); // n번째 문자를 저장
String s2 = o2.substring(n, n + 1);
// 비교 결과에 따라 int 반환
// s1 == s2: 0, s1 > s2: 1, s1 < s2: -1
return s1.compareTo(s2); // s1,s2만 비교해서 다시 기본 정렬 = 오름차순 정렬
}
});
System.out.println(Arrays.toString(strings)); // [car, bed, sun]
for(int i = 0; i < strings.length; i++) {
answer[i] = strings[i];
}
System.out.println(Arrays.toString(answer)); // [car, bed, sun]
return answer;
}
}
'ALGORITHM' 카테고리의 다른 글
[프로그래머스 Java] 문자열 내 p와 y의 개수 (0) | 2021.01.12 |
---|---|
char[] <-> String <-> String[] (0) | 2021.01.12 |
[프로그래머스 Java] 두 정수 사이의 합 (0) | 2021.01.12 |
[프로그래머스 Java] 나누어 떨어지는 숫자 배열 (0) | 2021.01.11 |
[프로그래머스 Java] 같은 숫자는 싫어 (0) | 2021.01.10 |