본문 바로가기
코테 준비(with 프로그래머스)

프로그래머스 day6, Java - 수열과 구간 쿼리2

by jeong11 2023. 11. 15.
반응형

3보다 2가 더 어렵다 

기초 문제가 올라가있는 순서대로 난이도가 조금씩 올라가는 것 같다 

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.

쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
, 특정 쿼리의 답이 존재하지 않으면 -1 저장합니다.

입출력 예
arr queries result
[0,1,2,4,3] [0,4,2],[0,3,2],[0,2,2] [3,4,-1]

입출력 예 
첫 번째 쿼리의 범위에는 0, 1, 2, 4, 3이 있으며 이 중 2보다 크면서 가장 작은 값은 3입니다.
두 번째 쿼리의 범위에는 0, 1, 2, 4가 있으며 이 중 2보다 크면서 가장 작은 값은 4입니다.
세 번째 쿼리의 범위에는 0, 1, 2가 있으며 여기에는 2보다 큰 값이 없습니다.
따라서 [3, 4, -1]을 return 합니다.

문제를 읽고서 무슨 말이지 전혀 이해가 안될 때 예시를 보는게 최고인 것 같다 

일단 코드 써가면서 이클립스에서 풀어보고 디버그 찍으면서 답을 찾아본다 

 

문제를 잘 푸는 방.법.은 알았는데 아직 많이 풀어보지 않아서 여전히 어렵다 ㅠㅠㅠㅠ 

 

 

*이클립스에서 돌려본 코드 

class Solution2 {
    
	public static void main(String[] args) {
		int[] arr = new int[]{0,1,2,4,3};
		int[][] queries = new int[][]{{0,4,2},{0,3,2},{0,2,2}};
		
		solution2(arr, queries);
		System.out.println(Arrays.toString(solution2(arr, queries)));
	}
	
	public static int[] solution2(int[] arr, int[][] queries) {
		  int[] answer = new int[queries.length];

	        for(int i=0; i<queries.length; i++){

	            int start = queries[i][0];
	            int end = queries[i][1];
	            int lim = queries[i][2];

	            int tmp = 0;
	            for(int j = start; j <= end; j++){
	                //System.out.println(limit + " : " + arr[j]);

	                if(lim < arr[j]){
			//System.out.println(tmp + " : " + arr[j]);

			// 1번 표현 방법
			// if(tmp != 0 && tmp < arr[j]) continue;
			// 2번 표현방법 
                        if(tmp != 0){
                        if(tmp < arr[j])continue;
                    	}
                        
	                    tmp = arr[j];
	                }
	            }

	            if(tmp == 0)tmp = -1;
	            //System.out.println(tmp);

	            answer[i] = tmp;
	        }

	        return answer;
	    }
	}

 

 

 

*내가 해결한 코드 

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
     int[] answer = new int[queries.length];

	        for(int i=0; i<queries.length; i++){

	            int start = queries[i][0];
	            int end = queries[i][1];
	            int lim = queries[i][2];

	            int tmp = 0;
	            for(int j = start; j <= end; j++){

	                if(lim < arr[j]){
	                    if(tmp != 0 && tmp < arr[j]) continue;
	                    
	                    tmp = arr[j];
	                }
	            }

	            if(tmp == 0)tmp = -1;
	            answer[i] = tmp;
	        }

	        return answer;
	    }
}

 

수열과 구간 쿼리 3, 2 풀었으니 이제 나머지 절반 남았다 ... 

반응형