[Algorithm] ๐Ÿ›ฉ๏ธ๋ฐฑ์ค€ 1927 ์ตœ์†Œ ํž™

HaJingJingยท2021๋…„ 9์›” 1์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
113/119

0. ๋ฌธ์ œ

๋„๋ฆฌ ์ž˜ ์•Œ๋ ค์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ์ตœ์†Œ ํž™์ด ์žˆ๋‹ค. ์ตœ์†Œ ํž™์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ฐฐ์—ด์— ์ž์—ฐ์ˆ˜ x๋ฅผ ๋„ฃ๋Š”๋‹ค.
๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ์€ ์ฒ˜์Œ์— ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด์—์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ x๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ x๊ฐ€ ์ž์—ฐ์ˆ˜๋ผ๋ฉด ๋ฐฐ์—ด์— x๋ผ๋Š” ๊ฐ’์„ ๋„ฃ๋Š”(์ถ”๊ฐ€ํ•˜๋Š”) ์—ฐ์‚ฐ์ด๊ณ , x๊ฐ€ 0์ด๋ผ๋ฉด ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. x๋Š” 231๋ณด๋‹ค ์ž‘์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๊ณ , ์Œ์˜ ์ •์ˆ˜๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ
์ž…๋ ฅ์—์„œ 0์ด ์ฃผ์–ด์ง„ ํšŸ์ˆ˜๋งŒํผ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์ธ๋ฐ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ•œ ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ
๐Ÿ’ก 0์ด๊ณ  ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด 0์„ list์— ๋„ฃ๊ณ , ํ๊ฐ€ ์•ˆ ๋น„์–ด์žˆ์œผ๋ฉด ํ์˜ ์ตœ์†Œ๊ฐ’์„ ๋บŒ
๐Ÿ’ก 0์ด ์•„๋‹ˆ๋ฉด ํ์— ์ˆซ์ž๋ฅผ ๋„ฃ์Œ

2. ํ•ต์‹ฌ ํ’€์ด

  1. ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ
PriorityQueue<Integer> pq = new PriorityQueue<>();
  1. 0์ด๊ณ  ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด 0์„ list์— ๋„ฃ๊ณ , ํ๊ฐ€ ์•ˆ ๋น„์–ด์žˆ์œผ๋ฉด ํ์˜ ์ตœ์†Œ๊ฐ’์„ ๋บŒ
if(tmp == 0) {
	if(pq.isEmpty()) {
		list.add(0);
	} else {
		list.add(pq.poll());
	}
}
  1. 0์ด ์•„๋‹ˆ๋ฉด ํ์— ์ˆซ์ž๋ฅผ ๋„ฃ์Œ
else {
	pq.add(tmp);
}

3. ์ฝ”๋“œ

import java.util.*;
import java.io.*;
public class BOJ_1927 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		PriorityQueue<Integer> pq = new PriorityQueue<>();
		ArrayList<Integer> list = new ArrayList<>();
		
		int n = Integer.parseInt(br.readLine());
		
		for(int i=0; i<n; i++) {
			int tmp = Integer.parseInt(br.readLine());
			
			if(tmp == 0) {
				if(pq.isEmpty()) {
					list.add(0);
				} else {
					list.add(pq.poll());
				}
			} else {
				pq.add(tmp);
			}
		}
		
		for(int i : list) {
			System.out.println(i);
		}
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€