본문 바로가기
백준/정렬

백준 11004 c++ "K번째 수" -PlusUltraCode-

by PlusUltraCode 2025. 9. 16.

https://www.acmicpc.net/problem/11004

 

[필자 사고]

단순히 오름차순 정렬한 뒤 해당 idx값을 반환하면 되는 문제다.

아래는 자세한 코드 해설이다.

[코드 해설]

main 함수

프로그램의 시작점으로, 전체 입력 처리와 정답 출력을 담당합니다.

  1. 입출력 최적화
    • ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    • C++ 표준 입출력 속도를 빠르게 하기 위한 설정입니다.
  2. 입력 처리
    • cin >> N >> K;
      • N은 배열의 크기, K는 구하고자 하는 K번째 작은 수의 위치입니다.
    • for (int i = 0; i < N; i++) 반복문에서 정수 num을 입력받아 arr 벡터에 저장합니다.
  3. 정렬 (sort 함수)
    • sort(arr.begin(), arr.end());
    • 벡터 arr를 오름차순으로 정렬합니다.
    • C++ 표준 라이브러리의 정렬 함수로, 평균 시간 복잡도는 O(N log N)입니다.
  4. 출력 (cout)
    • 정렬된 배열에서 K - 1번째 원소(arr[K - 1])를 출력합니다.
    • 문제에서 배열은 1번째부터 세므로, 인덱스 보정을 위해 K - 1을 사용합니다.

[소스 코드]

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int N, K;
vector<int> arr;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	cin >> N >> K;
	for (int i = 0; i < N; i++) {
		int num;
		cin >> num;
		arr.push_back(num);
	}
	sort(arr.begin(), arr.end());

	cout << arr[K - 1];
}