[Algorithm] ๐Ÿฆ›๋ฐฑ์ค€ 11286 ์ ˆ๋Œ“๊ฐ’ ํž™

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

Algorithm

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

0. ๋ฌธ์ œ

์ ˆ๋Œ“๊ฐ’ ํž™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

1. ๋ฐฐ์—ด์— ์ •์ˆ˜ x (xย โ‰  0)๋ฅผ ๋„ฃ๋Š”๋‹ค.
2. ๋ฐฐ์—ด์—์„œ ์ ˆ๋Œ“๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•œ๋‹ค. ์ ˆ๋Œ“๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ๋Š”, ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์€ ์ฒ˜์Œ์— ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด์—์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

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

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

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

๐Ÿ’ก ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ
๐Ÿ’ก ์ ˆ๋Œ“๊ฐ’๊ณผ ์›๋ž˜๊ฐ’์„ ์ €์žฅํ•  class ๊ตฌํ˜„
comparable์„ ํ†ตํ•ด ์ ˆ๋Œ“๊ฐ’ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ (์ ˆ๋Œ“๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ์›๋ž˜๊ฐ’ ์˜ค๋ฆ„์ฐจ์ˆœ)
๐Ÿ’ก ์ž…๋ ฅ์ด 0์ด ์•„๋‹ˆ๋ฉด, ์ˆ˜๋ฅผ ์šฐ์„ ์ˆœ์œ„ ํ์— ๋„ฃ์Œ
๐Ÿ’ก 0์ธ ๊ฒฝ์šฐ, ํ๊ฐ€ ๋น„๋ฉด 0์ถœ๋ ฅ ์•„๋‹ˆ๋ผ๋ฉด ํ์—์„œ ํ•˜๋‚˜ ๊บผ๋‚ด์„œ ์ถœ๋ ฅ

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

  1. ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ
PriorityQueue<Abs> pq = new PriorityQueue<>();
  1. ์ ˆ๋Œ“๊ฐ’๊ณผ ์›๋ž˜๊ฐ’์„ ์ €์žฅํ•  class ๊ตฌํ˜„
    comparable์„ ํ†ตํ•ด ์ ˆ๋Œ“๊ฐ’ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
    (์ ˆ๋Œ“๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ์›๋ž˜๊ฐ’ ์˜ค๋ฆ„์ฐจ์ˆœ)
static class Abs implements Comparable<Abs>{
		int abs;
		int origin;
		Abs(int abs, int origin){
			this.abs = abs;
			this.origin = origin;
		}
		
		@Override
		public int compareTo(Abs o) {
			if(this.abs == o.abs)
				return this.origin - o.origin;
			return this.abs - o.abs;
		}
		
	}
  1. ์ž…๋ ฅ์ด 0์ด ์•„๋‹ˆ๋ฉด, ์ˆ˜๋ฅผ ์šฐ์„ ์ˆœ์œ„ ํ์— ๋„ฃ์Œ
if(tmp != 0) {
	pq.add(new Abs(Math.abs(tmp), tmp));
}
  1. 0์ธ ๊ฒฝ์šฐ, ํ๊ฐ€ ๋น„๋ฉด 0์ถœ๋ ฅ ์•„๋‹ˆ๋ผ๋ฉด ํ์—์„œ ํ•˜๋‚˜ ๊บผ๋‚ด์„œ ์ถœ๋ ฅ
else {
	if(pq.isEmpty()) {
		sb.append("0");
	} else {
		sb.append(Integer.toString(pq.poll().origin));
	}
	sb.append("\n");
}

3. ์ฝ”๋“œ

import java.util.PriorityQueue;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class BOJ_11286 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		int n = Integer.parseInt(br.readLine());
		PriorityQueue<Abs> pq = new PriorityQueue<>();
		
		while(n-->0) {
			int tmp = Integer.parseInt(br.readLine());
			
			if(tmp != 0) {
				pq.add(new Abs(Math.abs(tmp), tmp));
			} else {
				if(pq.isEmpty()) {
					sb.append("0");
				} else {
					sb.append(Integer.toString(pq.poll().origin));
				}
				sb.append("\n");
			}
		}
		
		bw.write(sb.toString());
		bw.flush();
		bw.close();
	}
	
	static class Abs implements Comparable<Abs>{
		int abs;
		int origin;
		Abs(int abs, int origin){
			this.abs = abs;
			this.origin = origin;
		}
		
		@Override
		public int compareTo(Abs o) {
			if(this.abs == o.abs)
				return this.origin - o.origin;
			return this.abs - o.abs;
		}
		
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

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

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