728x90

https://school.programmers.co.kr/learn/courses/30/lessons/181923

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제)정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.  각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.  각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

 

 

 

 

 

풀이)

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = new int[queries.length];
        for (int i=0; i<queries.length; i++){
            int a = queries[i][0];
            int b = queries[i][1];
            int c = queries[i][2];


            int min = 0;
            for(int j=a; j<=b; j++){
            	//최소값을 구하기 위한 for문
                if(arr[j]>c){
                    min = arr[j];
                }else{arr[j]가 c보다 큰 값이 없다면 -1을 가짐
                    answer[i] = -1;
                }
            }

            for(int k=a; k<=b; k++){
                if(arr[k]>c){
                    if(arr[k]<min){ //arr[j]>c값이 여러개 있을 때 사용
                        min = arr[k];
                        answer[i] = min;
                    }else{ //하나일 경우 사용
                        answer[i] = min;
                    }
                }
            }

        }
        return answer;
    }
}

처음에 테스트는 통과했는데, 제출하면 자꾸 오류가 나서 반례 찾느라 고생좀 했당...

728x90