프로그래머스 : K번째 수

김아무개·2023년 3월 22일
0

프로그래머스

목록 보기
5/41

나의 접근 방법

먼저 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문처럼 사용한거나 마찬가지니까..!!🤓!!!
좀더 생각을 해보고 코드를 작성해보도록 노력해야겠다.
앞으로도 화이팅 💪

profile
Hello velog! 

0개의 댓글