728x90
문제설명
입력 & 출력
나의 풀이
import java.util.*;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for(int i = 0 ; i < commands.length ; i++){
int a = commands[i][0];
int b = commands[i][1];
int k = commands[i][2];
//a-1 ~ b-1
int[] arr = Arrays.copyOfRange(array,a-1,b);
Arrays.sort(arr);
answer[i] = arr[k-1];
}
return answer;
}
}
이번 문제는 간단하게 2차원 배열의 요소를 입력으로 받아 각 배열 요소가 i, j, k 식으로 있을 때 array 배열의 요소를 i번째에서 j번째 까지 자르고, 자른 배열의 k번째 요소를 구하는 문제입니다.
- 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
- array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
- 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
- 2에서 나온 배열의 3번째 숫자는 5입니다.
배열의 일부분을 복사해야 하기 때문에copyOfRange() 메서드를 사용했습니다.
먼저 commands의 길이만큼 배열은 초기화해줍니다. 그리고 i, j, k에 접근하기 위해서 commands를 순회하는 데 각 배열의 요소를 a, b, k 변수에 저장을 합니다.
그리고 copyOfRange() 메서드를 사용하여 array 배열을 복사하는 데 이때 a와 b를 지정하여 배열의 일부분을 복사해 줍니다.
문제에서 주어지는 commands 배열의 첫 번째 요소는 1부터 시작하기 때문에 a-1을 해줘야 합니다.
그리고 Arrays.sort() 메서드를 사용하여 복사한 배열을 오름차순으로 정렬해 주고, answer배열에 k번째 요소를 넣어줍니다. 물론 이 때도 k-1을 해줘야 합니다.
참고 ❗
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 구명보트 (Greedy 알고리즘, Java) (0) | 2024.06.17 |
---|---|
[프로그래머스] Lv.2 H-Index (Arrays.sort(), Java) (1) | 2024.06.16 |
[프로그래머스] Lv.2 프로세스 (PriorityQueue, poll(), offer() ,Java) (1) | 2024.06.16 |
[프로그래머스] Lv.2 기능개발 (큐 Queue, peek(), offer(), ArrayList, Java) (1) | 2024.06.15 |
[프로그래머스] Lv.2 의상 (HashMap, getOrDefault, Java) (0) | 2024.06.15 |