본문 바로가기

algorithm

K번째 수

programmers.co.kr/learn/courses/30/lessons/42748?language=java

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

위 문제에 대한 풀이이다!!!!

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Solution {
//    정렬 K번째 수
//    https://programmers.co.kr/learn/courses/30/lessons/42748?language=java
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());

        int i = 0;
        for(int[] c : commands) {
            List<Integer> cutList = list.subList(c[0] - 1, c[1]);
            List<Integer> sortedList = cutList.stream().sorted().collect(Collectors.toList());
            answer[i] = sortedList.get(c[2] - 1);
            i++;
        }
        return answer;
    }
}

 


참고: 2차원 배열을 말할 때 표처럼 생각하고 행과 열이라는 단어로 표현하고 있다!!!!

 

먼저 answer 배열을 commands의 길이만큼 선언한다. 행의 개수만큼의 배열이 나오게 된다.  답의 개수만큼 배열을 선언해주는 것이라고 보면 된다.
다음으로 int[] 배열을 arraylist로 바꿔준다.

그 후 for문을 돌면서 문제의 요구사항대로 해주면 된다. 지금 for문이 어떤 식으로 돌아가는지 모르겠다면 2차원 배열을 조금 공부해보면 쉽게 알 수 있을 것이다.

sibList는 매개변수1(fromIndex)에서 매개변수2 - 1(toIndex - 1)까지의 list를 반환해준다.

commands 배열의 각 행의 첫 번째 열에 시작 인덱스가 들어오는데, 배열을 1부터 시작한다고 가정해서 들어온다. 따라서 1을 빼준다.
또한 subList에서 매개변수2 - 1까지의 배열을 반환해주므로 2번째 매개변수에서는 1을 빼주지 않는다.

(뭐지???? 설명을 잘 못한 거 같다.... 아 몰랑 ㅋㅋㅋㅋㅋ)

암튼 그 후 정렬해주고, 정렬된 리스트에서 뽑고싶은 인덱스를 뽑아온다.

당연히 commands 배열의 마지막 열이 인덱스가 돼야 하고, 1 빼는 이유는 >0< 알거라고 생각한다!!!

 

뭔가 설명을 못한 거 같은데, ㅋㅋㅋㅋ 최선을 다해보았으니 어여쁘게 봐주시길!!!!!

'algorithm' 카테고리의 다른 글

백준 1065 - 한수  (0) 2021.09.16
카펫  (0) 2021.04.11
소수 찾기  (0) 2021.04.10
H-Index  (0) 2021.04.10
가장 큰 수  (0) 2021.04.07