말하는 컴공감자의 텃밭

프로그래머스 수열과 구간쿼리 2 <2점> - 자바(java) Collections.sort 본문

알고리즘/Programmers - Java

프로그래머스 수열과 구간쿼리 2 <2점> - 자바(java) Collections.sort

현콩 2023. 5. 13. 19:09
728x90

수열과 구간쿼리 2
뭐.. 뭐하라구요?

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

 

문제가 이해가 잘 안갔다. 이게뭐냐고

예시 보니까 아하

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

2차원 정수배열안에 s,e,k 로 나뉜 쿼리가 있는데 k보다 크면서 가장작은 값arr[i]에서 찾으면 된다.

조건에 해당하지 않는다면 -1을 출력하면 된다.

 

 s부터 e까지 범위에서, k보다 큰데 가장 작은놈을 arr에서 찾기가 문제이다. 

문제 이해만 멍때리면서 봐서 10분 걸렸네

 

그러면~ 먼저 쿼리부터 s,e,k 형식으로 정리를 해줘야겠죠,

먼저 array list를 선언하고, 조건에 맞는 친구를 list에 담아줍니다.

이후 조건을 주어 list가 비어있지 않다면 오름차순 정렬 후 값을 담아줍니다. 비어있다면 -1를 출력합니다.

이후 result에 담아서 출력하면 꿑.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;
 
class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        List<Integer> answer = new ArrayList<>();
 
        for (int[] query : queries) {
            int s = query[0];
            int e = query[1];
            int k = query[2];
 
            List<Integer> list = new ArrayList<>();
            for (int i = s; i <= e; i++) {
                if (arr[i] > k) {
                    list.add(arr[i]);
                }
            }
 
            if (!list.isEmpty()) {
                Collections.sort(list);
                answer.add(list.get(0));
            } else {
                answer.add(-1);
            }
        }
 
        int[] result = new int[answer.size()];
        for (int i = 0; i < answer.size(); i++) {
            result[i] = answer.get(i);
        }
 
        return result;
    }
}
 
cs

잡다하게 오류 있어서 시간은 많이 잡아먹었는데..

 

 

 

에게 2점 응애

 

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        List<Integer> answer = new ArrayList<>(); 

        for (int[] query : queries) {                            //향상된 for문으로 쿼리값 s,e,k로 파싱
            int s = query[0];
            int e = query[1];
            int k = query[2];

            List<Integer> list = new ArrayList<>();
            for (int i = s; i <= e; i++) {                        // s부터 e까지 범위를 정하고, k보다 크면 list에 add
                if (arr[i] > k) {
                    list.add(arr[i]);
                }
            }

            if (!list.isEmpty()) {                                   // list를 정렬하고, 가장 가까운값 저장
                Collections.sort(list);
                answer.add(list.get(0));
            } else {
                answer.add(-1);
            }
        }

        int[] result = new int[answer.size()];
        for (int i = 0; i < answer.size(); i++) {
            result[i] = answer.get(i);
        }

        return result;
    }
}

728x90
Comments