BAEKJOON/자료 구조
백준 2075번 [N번째 큰 수](C++) -yes6686- 티스토리
yes6686
2025. 2. 21. 19:31
728x90
반응형
SMALL
백준 문제 풀이: 2075 [N번째 큰 수]
문제 링크: https://www.acmicpc.net/problem/2075
문제 설명:
N×N 크기의 행렬이 주어졌을 때, 이 행렬에서 N번째로 큰 수를 찾는 문제입니다.
가장 큰 값을 우선적으로 관리하는 우선순위 큐
를 활용하여 해결할 수 있습니다.
문제 해결 코드
#include <iostream>
#include <queue>
using namespace std;
int arr[1501][1501]; // 행렬 저장 배열
priority_queue<pair<int, pair<int, int>>> pq; // 최대 힙
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n; // 행렬 크기 입력
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j]; // 행렬 원소 입력
if (i == n - 1) pq.push({ arr[i][j], {i, j} }); // 마지막 행의 원소를 큐에 삽입
}
}
int cnt = 0;
while (!pq.empty()) {
int k = pq.top().first;
int i = pq.top().second.first;
int j = pq.top().second.second;
pq.pop();
cnt++;
if (cnt == n) { // N번째로 큰 수를 찾으면 출력 후 종료
cout << k << '\n';
break;
} else {
if (i != 0) { // 위쪽 행에서 새로운 원소 추가
pq.push({ arr[i - 1][j], {i - 1, j} });
}
}
}
}
예제 입력:
5
12 7 9 15 5
13 8 11 19 6
21 10 26 31 16
48 14 28 35 25
52 20 32 41 49
예제 출력:
35
코드 설명
- 핵심 알고리즘: 우선순위 큐를 활용한 최대값 추출
- 구현 세부사항:
- 우선순위 큐(최대 힙)를 이용하여 N번째로 큰 값을 찾음
- 처음에는 마지막 행의 원소들을 큐에 삽입
- 큐에서 가장 큰 값을 꺼내면서 위쪽 행의 원소를 추가
- N번째 큰 값이 꺼내질 때 출력
- 시간 복잡도: O(N log N), 우선순위 큐를 이용한 연산
결과
주어진 행렬에서 N번째로 큰 수를 빠르게 찾아 출력할 수 있습니다. 우선순위 큐를 활용한 최적화된 탐색을 연습하기 좋은 문제입니다. 추가적인 질문이나 개선 사항이 있다면 댓글로 알려주세요!
728x90
반응형
LIST