본문 바로가기
Algorithm

[Java&알고리즘] k번째 수 (Level 1)

by GoodDayDeveloper 2023. 5. 8.
반응형

 

 

환경

언어 : 자바

단계 : 레벨 1단계 (입문자용)

정답률 : 68%

 

 

 

 

제목 

 

k번째 수

 
 
 

 

 

문제 설명 및 코드

 

 

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

 

 
제한사항
 
  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.
 
 

 

 

1
2
3
4
5
6
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = {};
        return answer;
    }
}
cs

 

 

 

 

 

 

입출력 예

 

 

 

 

 

입출력 예 설명

 

[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.

 

 

 

 

 

 

 

반응형

 

 

 

 

 

 

 

 

문제 정답 코드

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        
        for(int a=0; a<commands.length; a++){
            int[] xVal = new int[(commands[a][1]-commands[a][0])+1];
            int count = 0;
            
            for(int s=commands[a][0]-1; s<=commands[a][1]-1; s++){
                xVal[count] = array[s];
                ++count;
            }
 
            for(int d=0; d<xVal.length; d++){
                for(int f=d+1; f<xVal.length; f++){
                    if(xVal[d] > xVal[f]){
                        int temp = xVal[d];
                        xVal[d] = xVal[f];
                        xVal[f] = temp;
                    }
                }
            }
            
            answer[a] = xVal[commands[a][2]-1];
        }
        return answer;
    }
}
cs

 

 

commands의 배열 값에 따라 조건이 나눠지기 때문에 

 

commands의 배열을 밖에서 반복해주었고

 

값의 기준이 되는 array 배열은 안쪽에서 반복해주었ㅅ브니다.

 

조건에 따라 xVal의 가상의 배열에 값을 담을 다음 

 

오름차순을 해준 뒤 answer배열에 담아 return해줍니다.

 

 

 

 

 

 

 

다른사람 풀이

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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[] temp = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
            Arrays.sort(temp);
            answer[i] = temp[commands[i][2]-1];
        }
 
        return answer;
    }
}
 
cs

 

Arrays.copyOfRange를 통해서 배열을 복사할 수가 있습니다.

 

공식은 Arrays.copyOfRange(원본 배열, 복사할 시작인덱스, 복사할 끝인덱스) 입니다.

 

이렇게 temp에 복사를 해준 뒤, Arrays.sort로 정렬을 해준 다음

 

answer배열에 값을 담아 리턴해주기만 하면 됩니다.

 

API의 힘은 대단하군요...

 

 

 

 

 

 

 

반응형

댓글