※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 33118번 문제인 ICPC Provincial이다.
문제는 아래 링크를 확인하자.

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

 

어떤 수가 선택된 세 수의 중앙값이 되려면 그 수보다 작거나 같은 수가 선택된 세 수에 포함(자기자신 제외)되어 있어야 함을 관찰하자. 따라서 주어진 3N개의 수 중 N+2번째 수가 가장 작은 중앙값이 되게 하는 방법은 없지만 N+1번째 수가 가장 작은 중앙값이 되게 하는 방법은 존재함(예를 들어 i번째, i+N번째, i+2N번째 수와 같이 모든 쌍을 구성)을 알 수 있다.

 

따라서 주어진 수 중 N+1번째로 작은 수를 출력해 문제를 해결할 수 있다. 이는 자료를 정렬한 뒤 해당 순서의 자료를 고르는 것으로 간편하게 할 수 있다. 원한다면 퀵셀렉트 등의 다른 알고리즘을 사용해도 좋다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <algorithm>
using namespace std;

int N;
int A[300000];

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

	cin >> N;
	for (int i = 0; i < N * 3; i++) cin >> A[i];
	sort(A, A + N * 3);
	cout << A[N];
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 32925 // C++] Just Half is Enough  (0) 2025.01.08
[BOJ 33085 // C++] Stock Market  (0) 2025.01.07
[BOJ 32980 // C++] 분리배출  (0) 2025.01.03
[BOJ 32978 // C++] 아 맞다 마늘  (0) 2025.01.02
[BOJ 33026 // C++] LOL Lovers  (0) 2024.12.30

+ Recent posts