프로그래머스 Lv.0 수열과 구간 쿼리2

정수 배열 arr와 2차원 정수 배열 queries가 주어진다.
queries의 원소는 각각 하나의 query를 나타내며 [s, e, k] 꼴이다.
query마다 순서대로 모든 i에 대해
k보다 크면서 가장 작은 arr[i]를 찾는다.
각 쿼리 순서에 맞게 답을 저장한 배열을 return하라.
특정 쿼리의 답이 존재하지 않으면 -1을 저장한다.
arr | queries | result |
[0, 1, 2, 4, 3] | [[0, 4, 2], [0, 3, 2], [0, 2, 2]] | [3, 4, -1] |
** 풀이 방법
1. queries의 행에 접근하는 반복문과
하위에 queries[i][2]보다 큰 숫자들을
담기 위해 ArrayList를 생성한다.
2. 행이 넘어가기 전에
list 원소 개수를 체크해서
0일 때, 1일 때, 2이상일 때의조건을 지정해서 answer에 저장한다.
for (int i=0; i<queries.length; i++) {
List<Integer> list = new ArrayList<>(); //i가 바뀔때마다 새로 생성
for (int j=queries[i][0]; j<=queries[i][1]; j++) {
//queries[i][2]보다 큰 숫자들을 list에 저장한다.
if (arr[j] > queries[i][2]) {
list.add(arr[j]);
}
}
//list.size()가 0이면 answer에 -1을 저장한다.
if (list.size()==0) answer.add(-1);
//list.size()가 2이상이면 list에 저장된 원소의 최소값을 저장한다.
else if (list.size()>1) {
int min = list.get(0);
for (int k=1; k<list.size(); k++) {
if (list.get(k)<min)
min = list.get(k);
}
answer.add(min);
}
//list.size()가 1이면 첫번째 원소를 answer에 저장한다.
else answer.add(list.get(0));
}
<> 전체 코드 </>
import java.util.*;
class Solution {
public List<Integer> solution(int[] arr, int[][] queries) {
List<Integer> answer = new ArrayList<>();
for (int i=0; i<queries.length; i++) {
List<Integer> list = new ArrayList<>();
for (int j=queries[i][0]; j<=queries[i][1]; j++) {
if (arr[j] > queries[i][2]) {
list.add(arr[j]);
}
}
if (list.size()==0) answer.add(-1);
else if (list.size()>1) {
int min = list.get(0);
for (int k=1; k<list.size(); k++) {
if (list.get(k)<min)
min = list.get(k);
}
answer.add(min);
} else answer.add(list.get(0));
}
return answer;
}
}
반응형
'개발로그 > 알고리즘' 카테고리의 다른 글
프로그래머스 Lv.0 무작위로 k개의 수 뽑기 (0) | 2023.07.28 |
---|---|
프로그래머스 Lv.0 그림 확대 (0) | 2023.07.28 |
프로그래머스 Lv.0 세 개의 구분자 (0) | 2023.07.26 |
프로그래머스 Lv.0 공 던지기 (0) | 2023.07.26 |
프로그래머스 Lv.0 잘라서 배열로 저장하기 (0) | 2023.07.26 |
댓글