공부하는 스누피

[JAVA] K번째수 - Arrays 본문

Algorithms/코딩테스트 문제풀이

[JAVA] K번째수 - Arrays

커피맛스누피 2020. 7. 12. 00:25

Python으로 풀고 싶어요..

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

 

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

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

programmers.co.kr

 

생각과정

- 배열의 일부분을 추출하고,

- 거기서 k번째 수를 찾는다!

- i, j, k가 이차원 배열로 주어져 있으니 for문을 사용해 순회하면서 k번째 수를 넣는다.

- i, j, k 쌍의 개수를 N으로 하면, 시간복잡도는 O(N)이다.

 

구현

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 []arr = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
            
            //배열 정렬
            Arrays.sort(arr);
                        
            //k번째 숫자 넣기
            answer[i] = arr[commands[i][2]-1];
        }
        
        return answer;
    }
}

 

결과

20분만에 패스!

 

Arrays 클래스

Arrays 클래스는 java.util 패키지에 들어있는데, 배열을 다루는 메소드들을 가지고 있다. 

위 구현 코드에서는 Arrays 클래스를 직접 사용하기 때문에 따로 import했지만, 일반적으로 배열 객체에 내장되어 있어 바로 사용하면 된다고 한다.

자주 쓰는 메소드는 다음과 같다.

 

- 정렬

Arrays.sort()  => 구현 코드에서는 클래스이름.메소드(배열객체)로 오름차순 정렬했다.

 

- 출력

Arrays.toString()

 

- 배열 복사

Arrays.copyOf(원본배열, 복사할 길이)

Arrays.copyOfRange(원본배열, 시작 인덱스, 끝 인덱스) => 끝 인덱스 항목을 포함하지 않으니 주의!

 

이 외에도 BinarySearch(), equals(), fill() 등 유용한 메소드가 많다.

K번째 수는 매우 간단한 문제지만 덕분에 Arrays 클래스를 복습할 수 있었다.

참고

https://taeil00.tistory.com/193

 

Arrays.copyOf , Arrays.copyOfRange 배열 복사

Arrays.copyOf() , Arrays.copyOfRange() 메소드를 통해 배열을 복사 할 수 있다. Arrays.copyOf(원본배열, 복사할 길이); Arrays.copyOfRange(원본 배열, 복사할 시작인덱스, 복사할 끝인덱스) 인덱스는 0부터 시..

taeil00.tistory.com

https://codeman77.tistory.com/64

 

[ Java ] 배열 다루기 ( Arrays Class )

Arrays Class란? ▶ Arrays Class에는 정렬 및 검색과 같은 배열 조작을 위한 다양한 메서드가 포함 되어있음 ▶ https://docs.oracle.com/javase/8/docs/api/ Arrays Class 사용 예제 import java.util.Arrays;..

codeman77.tistory.com

 

Comments