1. 문제

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

 

2075번: N번째 큰 수

첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.

www.acmicpc.net

2. 접근방법

 

pq활용

1. 가장 마지막 row의 값들을 pq에 담기

2. 내림차순으로 하나씩 꺼내기

3. 꺼낸 수의 윗 값을 pq에 담기

4. 2-3을 N번 수행 후 나온 값을 출력

 

3. 자바 코드

package Gold;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class G5_2075N번째큰수 {

	static class node implements Comparable<node> {
		int num;
		int idx;

		public node(int num, int idx) {
			super();
			this.num = num;
			this.idx = idx;
		}

		@Override
		public int compareTo(node o) {
			return Integer.compare(o.num, this.num);
		}
	}

	public static void main(String[] args) throws Exception {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int N = Integer.parseInt(br.readLine());
		PriorityQueue<node> pq = new PriorityQueue<node>();
		int[] rowIdx = new int[N];
		Arrays.fill(rowIdx, N - 1);
		int map[][] = new int[N][N];
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < N; j++)
				map[i][j] = Integer.parseInt(st.nextToken());
		}
		for (int i = 0; i < N; i++) {
			pq.add(new node(map[N-1][i], i));
		}
		int num = 0;
		while (N-- != 0) {
			node now = pq.poll();
			num = now.num;
			rowIdx[now.idx]--;
			if (rowIdx[now.idx] > -1)
				pq.add(new node(map[rowIdx[now.idx]][now.idx], now.idx));
		}
		System.out.println(num);
	}
}

4. 마치며

메모리 초과인 풀이들이 있는 것으로 봐선 냅다 다 pq에 넣으면 메모리 초과가 뜨나보다

근데 다 해봤자 1500 X 1500 = 2250000이고

int 200만개 쓰면 8MB인데 메모리 제한이 12MB면 흠...

 

 

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준] 6416 트리인가?  (0) 2021.10.12
[백준] 1068 트리  (0) 2021.10.05
[백준] 7662 이중 우선순위 큐  (1) 2021.09.30
[백준] 3197 백조의 호수  (0) 2021.08.27
[백준] 1167 트리의 지름  (2) 2021.08.22

+ Recent posts