728x90
반응형

문제를 보고 하나의 for문을 돌리며 한번에 return 값을 내려고 했다.
조금 쉽게 배열의 범위를 subString과 같이 쉽게 자르는 방법을 생각하다가 문득
copyOfRange 메서드가 생각났다.
//먼저 결과 배열을 선언한다.
int[] result = new int[commands.length];
for(int i=0; i<commands.length; i++) {
//배열을 길이에 맞게 자른다(copyOfRange 메서드의 마지막 값은 제외되기 때문에 +1해줘야 함)
int[] subArray = Arrays.copyOfRange(array, commands[i][0] -1, commands[i][1]);
Arrays.sort(subArray); //정렬
int value = subArray[commands[i][2] -1];
result[i] = value;
}
return result;
//최대한 짧게 하나의 for문으로 짜려고 노력했는데 가독성이 좋은지 모르겠다..

public class cote {
public static void main(String[] args) {
String[] str = {"abce", "abcd", "cdx"};
int n=2;
Solution so = new Solution();
System.out.println(Arrays.toString(so.solution(str, n)));
}
}
class Solution {
public String[] solution(String[] str, int n) {
Arrays.sort(str, new Comparator<String>() {
//string 배열을 정렬한다. 커스텀 비교자를 제공하여 문자열을 특정 기준으로 정렬하도록 한다.
@Override
public int compare(String o1, String o2) {
//인터페이스에서 상속받은 compare메서드를 재정의한다. 두 문자열을 비교하여 정수값을 반환한다.
int comparison = Character.compare(o1.charAt(n), o2.charAt(n));
if(comparison == 0) {
return o1.compareTo(o2);
}
return comparison;
}
});
return str;
}
//Comparator 의 compare 메서드는 정렬 알고리즘이 작동하는 동안 요소 간의 순러를 결정하기 위해
//반복적으로 호출된다. 배열의 길이만큼 호출되면서 모든 인덱스를 비교한다.
매일 같이 코딩테스트를 하다보니 코드와 많이 친해진 느낌이다.
아직 인터페이스 부분이 어렵긴 하지만 문서를 자주 들여다 봐야겠다.
728x90
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/Java] 짝지어 제거하기 (1) | 2023.12.28 |
|---|---|
| [프로그래머스/Java]가장 가까운 같은 글자, 두 개 뽑아서 더하기 (1) | 2023.09.30 |
| [프로그래머스/Java] 정수 제곱근 판별 (0) | 2023.09.13 |
| [프로그래머스/Java] 문자열 내 p와 y의 개수 (0) | 2023.09.11 |
| [프로그래머스/Java] 자연수 뒤집어 배열로 만들기 (0) | 2023.09.07 |