프로그래머스 - 문자열 내 마음대로 정렬하기 (Level 1)
2024. 1. 23. 19:03ㆍ코딩테스트 정리(자바)
728x90
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, new Comparator<String>(){
public int compare(String o1,String o2){
if(o1.charAt(n)==o2.charAt(n))
return o1.compareTo(o2); //인덱스 n에 해당하는 문자가 같다면 사전식 정렬
return o1.charAt(n)-o2.charAt(n); // 인덱스 n에 해당하는 문자가 다를 때
}
});
return strings;
}
}
Comparator는 Array나 Collections일 때 가능하다.
Arrays.sort()나 Collections.sort()에서 사용 가능.
단순히 배열을 오름차순 정렬하려면 Arrays.sort()를 사용하면 되지만
조건이 붙은 정렬에는 Comparator 클래스를 이용해 사용자 정의 정렬을 만들어야 한다.
우선, 1. Comparator 객체를 생성하고
2. compare 메서드를 오버라이딩하여 내부에 정렬 조건을 기술해 주어야 한다.
compareTo 메서드
: 두 인자가 숫자일 경우
두개의 인자를 비교하여 정렬해 주며 결괏값으로 기준값 o1보다 비교값 o2가 크면
-1, 같으면 0, 작으면 1을 리턴해준다.
o1 < o2 -> -1
o1 == o2 -> 0
o1 > o2 -> 1
즉, 기준값이 더 크면 1을 작으면 -1을 같으면 0을 반환.
반환값을 기준으로 정렬.
두 인자가 문자열일 경우는
1) 기준값에 비교대상이 포함되어있을 경우
서로의 문자열 길이의 차이값을 리턴
(같은 위치의 문자만 비교)
예) "abcd" "a" -> 4-1= 3 반환
2) 같은 위치의 문자가 다르다면
아스키코드 값의 차이값을 리턴
예) "abcd" "c" -> 97-99= -2 반환
다음과 같이 람다식으로도 표현할 수 있다.
Arrays.sort(strings, (o1,o2)-> {
if(o1.charAt(n)==o2.charAt(n))
return o1.compareTo(o2);
return o1.charAt(n)-o2.charAt(n);
});728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 프로그래머스 - 중복된 문자 제거(Level 1) (0) | 2024.01.25 |
|---|---|
| 프로그래머스 - 가장 큰수 (Level 2) (2) | 2024.01.24 |
| 프로그래머스 - 전화번호 목록 (Level 2) (0) | 2024.01.23 |
| 프로그래머스 - 문자열 내림차순으로 배치하기(Level 1) (0) | 2024.01.22 |
| 프로그래머스 - H-Index (Level 2) (2) | 2024.01.22 |