프로그래머스 K번째 수

일단 문제를 코드로 간단화 시켜보자

    public static void main(String[] args) {
        int[] array = {1, 5, 2, 6, 3, 7, 4};  //원본배열
        int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}}; // 명령내릴 배열
        int i = commands[0][0]-1; // i번째  
        int j = commands[0][1]-1; // j번째
        int k = commands[0][2]-1; // k번째
        int[] b = Arrays.copyOfRange(array,i,j); //핵심코드
        Arrays.sort(b); //정렬 
        System.out.println(b[k]);// answer 배열에 저장할 K번째 숫자답 

왜 i,j,k의 -1을 해주었냐면 배열은 0부터 시작이기 때문에 그렇다.

잘 돌아가는 것을 확인할 수 있다. 다만 큰 문제는 첫번째는 잘 돌아가지만
Arrays.copyOfRange(array,3,3) 이렇게 되면 6이 나와야하지만
인덱스에 들어가질 않는다 3,3번째 자리면 3이 나와야하는데 왜 안될까

copyOfRange는 끝자리까지 이기 때문에 안되는것이다. +1을 해주면 잘된다.

import java.util.*;
public class kNumber {



    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        List<Integer> answer1 = new ArrayList<>();
        for(int i = 0;i<commands.length;i++) {
                for (int j = 0; j < commands[i].length; j++) {
                    list.add(commands[i][j] - 1);
                }
                int[] b = Arrays.copyOfRange(array,list.get(0),list.get(1)+1);
                Arrays.sort(b);
                answer1.add(b[list.get(2)]);
                list.clear();
        }
        int[] answer = answer1.stream().mapToInt(Integer::intValue).toArray();
        System.out.println();



}
}

최종 코드 answer를 integer > int 배열로 바꿔주는 것만 넣어주면 쉽게 풀린다.

좋은 웹페이지 즐겨찾기