[Study] 프로그래머스 lv.1 K번째 수

ayboori·2023년 8월 7일
0

Java Study

목록 보기
24/34

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

풀이 로직

  1. i번째부터 j번째까지 자른 배열 생성
  2. 임시 배열에 값 추가
  3. 값 정렬
  4. 생성한 배열의 k번째 값을 담은 배열
  5. 결과값 return

실패한 코드

import java.util.TreeSet;

class Solution {
    public int[] solution(int[] array, int[][] commands) {   
        int [] answer =  new int[commands.length];        
        int j = 0;
        
        // 1. i번째부터 j번째까지 자른 treeSet 생성
        for(int[] num : commands){
            TreeSet<Integer> treeset = new TreeSet<>();
            
            for(int i = num[0]-1 ; i < num[1] ; i++){
                // 2. treeSet에 값 추가 (자동 정렬)
                treeset.add(array[i]);
            }    
            
	        // 3. 생성한 배열의 k번째 값을 담은 배열
	        int count = 0;
	        for (int x : treeset){
	            if(++count == num[2]){
	            answer[j++] = x; 
	            }
	        }
                        
        }   
        
        // 4. 결과값 return
        return answer;
    }
}

정렬 > TreeSet을 떠올려서 사용했는데, Set의 특성 상 중복 숫자를 저장하지 못해서 오류가 발생했다.

내가 작성한 코드

import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {   
        int [] answer =  new int[commands.length];        
        int j = 0;
        
        // 1. i번째부터 j번째까지 자른 배열 생성
        for(int[] num : commands){
            int k = 0;
            int temp[] = new int [num[1] - num[0] + 1];
            
            for(int i = num[0]-1 ; i < num[1] ; i++){
                // 2. 배열에 값 추가
                temp[k++] = array[i];
            }
            
        // 3. 값 정렬
        Arrays.sort(temp);
                        
        // 4. 생성한 배열의 k번째 값을 담은 배열
        answer[j++] = temp[num[2]-1];                        
        }
        
        // 5. 결과값 return
        return answer;
    }
}
profile
프로 개발자가 되기 위해 뚜벅뚜벅.. 뚜벅초

1개의 댓글

comment-user-thumbnail
2023년 8월 7일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기