[Java] K번째 수

peace w·2024년 6월 6일
0

프로그래머스

목록 보기
25/25
post-custom-banner


이전에 풀었던 문제들을 다시 풀어 보았다.

1. Arrays.copyOfRange() 메서드 활용

  • Arrays.copyOfRange(arr, n1, n2) -> 원본배열, 시작인덱스, 끝인덱스.
  • 시작인덱스부터 끝 인덱스 앞 까지 잘라서 복사한다.
import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length]; // new int[3]
        
        for(int i = 0; i < commands.length; i++) {
            int start = commands[i][0]; // 시작 인덱스
            int end = commands[i][1]; // 끝 인덱스
            int th = commands[i][2]; // 자를 n번째 자리

            int[] arr = Arrays.copyOfRange(array, start-1, end); // 시작인덱스부터 끝인덱스까지 복사한 배열
            Arrays.sort(arr); // 배열 오름차순 정렬
            answer[i] = arr[th-1]; // n번째 숫자만 가져오기
        }
        
        return answer;
    }
}

2. Arrays.sort() 사용

  • Arrays.copyOfRange() 없이 반복문으로 복사
  • Arrays.sort() -> 배열을 오름차순 정렬
import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length]; // new int[3]
        int n = 0;
        
        for(int i = 0; i < commands.length; i++) {
            int k = 0;
            
            int start = commands[i][0]; // 시작 인덱스
            int end = commands[i][1]; // 끝 인덱스
            int th = commands[i][2]; // 자를 n번째 자리
            
            int[] arr = new int[end - start + 1];
            
            for(int j = start; j <= end; j++) {
                arr[k++] = array[j - 1]; // 시작인덱스부터 끝인덱스까지 복사
            }
            Arrays.sort(arr); // 배열 오름차순 정렬
            answer[n++] = arr[th - 1]; // n번째 숫자만 가져오기
        }
        return answer;
    }
}

회고

java.util.Arrays 클래스를 사용했는데 퀵 정렬로도 풀이가 가능한 것을 알게되었다.
알고리즘 공부를 선행하고 퀵 정렬 방법으로도 풀어봐야겠다.

문제 링크

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

profile
더 성장하자.
post-custom-banner

0개의 댓글