본문 바로가기
Algorithm/Java

백준 11004번 K번째 수

by Shark_상어 2023. 2. 1.
728x90

문제

수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 5,000,000)과 K (1 ≤ K ≤ N)이 주어진다.

둘째에는 A1, A2, ..., AN이 주어진다. (-109 ≤ Ai ≤ 109)

출력

A를 정렬했을 때, 앞에서부터 K번째 있는 수를 출력한다.

2. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // n, k 입력
        String [] arr = br.readLine().split(" ");

        // 참조형 변수로 전환
        int n = Integer.parseInt(arr[0]);
        int k = Integer.parseInt(arr[1]);

        // ArrayList 선언
        // collections.sort 사용 하기 위함
        ArrayList<Integer> ans = new ArrayList<>();

        // 수 입력
        String [] nums = br.readLine().split(" ");

        // ans 배열에 입력받은 수를 참조형 변수로 변환 한걸 넣기
        for (int i = 0; i < n; i++) ans.add(Integer.parseInt(nums[i]));

        // 정렬
        Collections.sort(ans);

        // 정답 출력
        System.out.println(ans.get(k - 1));
    }
}

3. 회고

Q. 문제를 보고 든 생각

    • Tim sort()를 알고 난 이후 이 문제는 Tim sort()를 사용해야 겠다는 생각부터 들었다.
    • Tim sort()를 쓰기 위해 ArrayList 만들고 입력 받은 수들을 int형으로 전환후 넣어주어야겠다는 생각를 했다.
    • 정렬 이후 ArrayList에 있는 인덱스 값을 뽑아내기 위해서는 get를 사용해야 한다.
    • get으로 해당 인덱스 값 도출! 

4. 고쳐야 할점

자바는 라이브러리를 얼만큼 많이 알고 있는지에 따라 코드의 길이가 달라지는 것 같다.

728x90

'Algorithm > Java' 카테고리의 다른 글

백준 1786번 찾기  (0) 2023.02.08
백준 2178번 미로 탐색  (0) 2023.02.07
[Java] 기본형 변수와 참조형 변수  (0) 2023.01.29
선택 정렬 과 시간 복잡도  (0) 2023.01.26
자바 [JAVA] - 삽입 정렬(Insertion Sort)  (0) 2023.01.23