https://school.programmers.co.kr/learn/courses/30/lessons/42748
문제 설명
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때 k 번째 있는 수 구하기
제한 사항
array의 길이는 1이상 100이하
array의 각 원소는 1이상 100이하
commands의 길이는 1이상 50이하
commands의 각 원소는 길이가 3
예시
array : [1, 5, 2, 6, 3, 7, 4]
commands : [[2, 5, 3], [4, 4, 1], [1, 7, 3]]
결과 : [5, 6, 3]
풀이 과정
문제를 이해하는데에도 꽤나 시간이 들었다. 2차원배열 commands의 첫 번째 원소로 보면 i가 2, j가 5 k가 3으로 주어졌다. 그러면 2번째 원소부터 5번째 원소까지 자르고 그 배열을 정렬했을 때 3번째 원소를 찾는 것이다. 우선 2차원 배열의 원소들을 모두 돌기 위해 for문을 두 번 사용했다. 그리고 해당하는 범위만큼 리스트에 넣어주고 정렬한 다음 원하는 위치에 있는 값을 반환할 정답 배열에 넣고 리스트를 다시 초기화 해주었다. 그리고 commands의 모든 원소를 돌 때 까지 반복한다. 다른 사람의 풀이 방법을 확인해 보면 Arrays.copyOfRange() 를 통해 원하는 범위만큼 잘라내는 과정을 쉽게 풀어낸 사람들도 많이 보였다. 아무래도 이 방법을 쓰면 코드가 짧아져 가독성은 훨씬 좋아지는 것 같다.
import java.util.*;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
List<Integer> intList = new ArrayList<>();
for(int i=0; i<commands.length; i++){
for(int j=commands[i][0]; j<=commands[i][1]; j++){
intList.add(array[j-1]);
}
Collections.sort(intList);
answer[i] = intList.get(commands[i][2]-1);
intList.clear();
}
return answer;
}
}
'개발일지' 카테고리의 다른 글
20231207 - Spring으로 MultipartFile 받기 (2) | 2023.12.07 |
---|---|
20231206 - @CreatedDate, @LastModifiedDate (1) | 2023.12.06 |
20231204 - 프로그래머스/12915 (2) | 2023.12.04 |
20231201 - Dto 테스트 (0) | 2023.12.01 |
20231201 - 프로그래머스/12926 (1) | 2023.12.01 |