N번째 큰 수
문제
N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=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 |
이러한 표가 주어졌을 때, N번째 큰 수를 찾는 프로그램을 작성하시오. 표에 채워진 수는 모두 다르다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.
출력
첫째 줄에 N번째 큰 수를 출력한다.
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
1 초 | 12 MB | 22578 | 9076 | 6519 | 39.148% |
구현
- N번째 큰 수를 찾는 문제입니다. 가장 큰 수부터 하나씩 제거하며 N번째로 큰 수를 찾도록 구현하였습니다.
각 열마다 정렬이 되어있으므로 각 열의 가장 마지막 행에 있는 수들을 최대힙에 넣고 하나씩 꺼내면서 꺼낼때마다 그 수의 바로 위의 행의 수(같은 열중에 자신보다 바로 하나 작은 수)를 다시 최대힙에 추가하는 방식으로 구현했습니다.
(해보지는 않았지만 하나씩 넣지 않고 모든 수 (최대 1500 * 1500개의 수)를 전부 힙에 넣으면 아마 메모리 제한에 걸릴 것 같습니다.)
제출 결과
소스코드
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
/**
* N번째 큰 수
*/
public class BOJ2075 {
static int n;
static int map[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PriorityQueue<Info> pq = new PriorityQueue<>((i1,i2) -> i2.num - i1.num);
n = Integer.parseInt(br.readLine());
map = new int[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
String s[] = br.readLine().split(" ");
for (int j = 1; j <= n; j++) {
map[i][j] = Integer.parseInt(s[j - 1]);
if (i == n) pq.add(new Info(i, j, map[i][j]));
}
}
for (int i = 0; i < n - 1; i++) {
Info max = pq.poll();
if(max.x > 1)
pq.add(new Info(max.x - 1, max.y, map[max.x - 1][max.y]));
}
System.out.println(pq.poll().num);
}
static class Info{
int x, y, num;
public Info(int x, int y, int num) {
this.x = x;
this.y = y;
this.num = num;
}
}
}
https://www.acmicpc.net/problem/2075
2075번: N번째 큰 수
첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.
www.acmicpc.net
'PS > 백준' 카테고리의 다른 글
[ BOJ 16234 ] 인구 이동 ( JAVA ) (0) | 2023.07.24 |
---|---|
[ BOJ 4179 ] 불! ( JAVA ) (0) | 2023.05.26 |
[ BOJ 9205 ] 맥주 마시면서 걸어가기 ( JAVA ) (0) | 2023.04.11 |
[ BOJ 1761 ] 정점들의 거리 ( JAVA ) (0) | 2023.04.10 |
[ BOJ 1987 ] 알파벳 ( JAVA ) (0) | 2023.04.05 |