Today
-
Yesterday
-
Total
-
  • 프로그래머스 : K번째 수
    코딩테스트 문제 풀이/프로그래머스 2023. 11. 21. 00:01

    나의 접근 방법

    먼저 foreach문을 사용해서 array의 제시된 부분을

    Arrays 클래스의 copyOfRange( 원본배열 , 시작인덱스 , 끝인덱스 ) 메소드를 사용해

    새로운 배열로 복사해온다.

    그 다음 Arrays 클래스의 sort 메소드를 사용하여 정렬을 하고

    결과를 담을 answer 배열에 제시된 인덱스의 값을 담아준다.

    내 코드

    public int[] test(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        int idx = 0;
        for (int[] arg : commands) {
            int[] list = Arrays.copyOfRange(array, arg[0] - 1, arg[1]);
            Arrays.sort(list);
            answer[idx++] = list[arg[2] - 1];
        }
    
        return answer;
    }

    1. 변수 생성

    // 결과값을 담을 answer 배열. 배열의 크기는 commands의 크기와 같다
    int[] answer = new int[commands.length]; 
    
    // answer의 인덱스 위치를 알려줄 변수
    int idx = 0;

    2. 배열 복사

    // 향상된 for문(= foreach)을 사용하여 2차배열인 commands의 내부 배열에 접근한다
    for (int[] arg : commands) {
    		// 새로운 배열 list로 
    		// arg에 제시된 범위의 array 값들 복사
        int[] list = Arrays.copyOfRange(array, arg[0] - 1, arg[1]);
    
    		// Arrays 클래스의 sort 메소드를 이용하여 정렬
        Arrays.sort(list);
    
    		// answer 배열에 결과로 출력할 값을 담는다.
        answer[idx++] = list[arg[2] - 1];
    }

    다른 사람 코드

    출처 : 프로그래머스 스쿨 - 다른사람 풀이 첫번째

    public int[] test(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
    
        for (int i = 0; i < commands.length; i++) {
            int[] list = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
            Arrays.sort(list);
            answer[i] = list[commands[i][2] - 1];
        }
    
        return answer;
    }

    내 코드에서 볼 수 있듯이 나는 idx라는 변수를 새로 생성해서 answer 배열에 사용하였다.
    생각을 조금만 더 해봤었더라면 하는 아쉬움이 생겼는데,
    내 코드에서 사용된 idx 변수가 결국 commands의 길이 - 1 까지 증가할 것이고,
    그렇게 된다면 굳이 향상된 for문을 사용할 필요 없이
    기본 for문을 사용하는게 더 나았을거라는 생각이 들었기 때문이다.
    왜냐하면 내가 사용한 코드는 결국
    향상된 for문을 기본형태의 for문처럼 사용한거나 마찬가지니까..!!🤓!!!
    좀더 생각을 해보고 코드를 작성해보도록 노력해야겠다.
    앞으로도 화이팅 💪

Designed by Tistory / Custom by 얼거스