2022. 8. 19. 14:19ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/11004
11004번: K번째 수
수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
접근 방법 - 정렬의 기본 문제
백준의 11004번 문제는 정렬에 있어 비교적 기본적인 문제이다.
해당 문제는, 특정 입력값들에 대하여 오름차순 정렬을 하였을 때 이에 관한 K번째 숫자를 출력해야 하는 문제이다.
이 문제는 입력값이 많아질 수도 있는 문제이기 때문에 조금 어렵게 다가올 수도 있는 문제이다.
다만 sort() 함수만 사용할 수 있다면 이렇게 많은 값들에 대한 정렬도 손쉽게 해결할 수 있다.
혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 코드와 설명을 참고해보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 입력값들을 저장할 배열(arr)을 전역 변수로 선언해둔다.
2) 입력값의 개수(n)와 정답을 구하고자 하는 숫자의 순번(a)을 입력받는다.
3) arr의 값들을 하나씩 입력받는다.
4) sort() 함수를 이용하여 arr의 배열값들을 오름차순으로 정렬한다.
5) 오름차순 정렬이 완료되었다면, a-1번의 배열값을 출력한 뒤 실행 종료한다.
(배열 번호는 0번부터 시작하여 n-1번으로 끝나기 때문에 본래 구하고자 하는 순번에 1을 뺀 번호로 탐색해야 한다.)
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <algorithm>
#define endl '\n'
using namespace std;
//백준 11004번 코드
int arr[5000001];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n, a;
cin >> n >> a;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
cout << arr[a - 1] << endl;
}
제출 결과
(2022.07.29 백준 11004번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 14582번 오늘도 졌다 (C++/cpp) (0) | 2022.08.19 |
---|---|
[백준 BOJ] 5339번 콜센터 (C++/cpp) (0) | 2022.08.19 |
[백준 BOJ] 4999번 아! (C++/cpp) (0) | 2022.08.18 |
[백준 BOJ] 10867번 중복 빼고 정렬하기 (C++/cpp) (0) | 2022.08.18 |
[백준 BOJ] 18110번 solved.ac (C++/cpp) (0) | 2022.08.18 |