[ Programmers ] K번째 수 (Java)

ma.caron_g·2021년 12월 4일
0

Lv.1 - Programmers (완성)

목록 보기
64/74
post-thumbnail

1. Problem 📃

[ K번째 수 ]

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



2. Constraint 🔗



3. Solution 🔑

  1. 문제를 보면 commands값에 있는 i, j, k는 우리가 세는 i, j, k번째를 말하므로 코딩 할 때 배열은 0부터 세므로 각자에서 1을 뺀 위치부터 하면 된다.
  2. answer은 commands.length()만큼 나오므로 answer의 길이는 commands 1차 배열 길이 만큼 나오므로 answer의 크기는 commands.length();만큼 선언.
  3. 입력 된 array 배열을 commands[n][0] 부터 commands[n][1]까지 임시 배열에 담는다.
  4. 임시 배열을 command[n][2]번째 값을 answer[n]에 넣어주고 answer을 리턴.

4. Code 💻

[ Arrays.copyOfRange()를 몰랐을 때 ]
이 코드는 보자마자 억소리가 났다.. 굳이 리스트 없이도 풀 수 있을텐데

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Arrays;

class Solution {
	public int[] solution(int[] array, int[][] commands) {

		int[] answer = new int[commands.length];

		ArrayList<Integer> list = new ArrayList<Integer>(); // array
		ArrayList<Integer> ijk = new ArrayList<Integer>(); // commands
		List<Integer> ar = new ArrayList<Integer>();
		
		for (int a = 0; a < commands.length; a++) { // commands(찾을) 횟수만큼 반복
			ar.clear();
			for (int arr : array) {
				ar.add(arr);
			}
            
			ijk.clear();
			for (int b = 0; b < 3; b++) { // 구간 지정
				ijk.add(commands[a][b]);
			}
			
			ar = list.subList(ijk.get(0) - 1, ijk.get(1)); // 구간만큼 자르기
			Collections.sort(ar); // 자른 구간 정렬

			answer[a] = ar.get(ijk.get(2) - 1); // 자른 구간에서 commands[n][2]를 정답에 추가
		}
		return answer;
	}
}

[ Arrays.copyOfRange()를 알고 난 후 ]

import java.util.Arrays;

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

5. Growth 🍄

Arrays.copyOf() , Arrays.copyOfRange() 메소드를 통해 배열을 복사 할 수 있다.
Arrays.copyOf(복사 대상의 배열, 복사할 길이);

Arrays.copyOfRange(복사 대상의 배열, 시작 인덱스, 끝 인덱스) 인덱스는 0부터 시작하는것 기준

* 끝 인덱스는 입력된 끝 인덱스 값 앞까지이므로 인덱스 n까지 복사하려면 n+1을 넣어주면 된다.
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글