๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 7662_์ด์ค‘ ์šฐ์„ ์ˆœ์œ„ ํ

๋ฟŒ์•ผ._. 2023. 6. 19. 17:02

Gold IV

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/7662)

< ์ด์ค‘ ์šฐ์„ ์ˆœ์œ„ ํ >

 

๋ฌธ์ œ ํ’€์ด & ์ƒ๊ฐ

 

์ฒ˜์Œ์—๋Š” ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ 2๊ฐœ ์„ ์–ธํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋‹ค. ์‹œ๊ฐ„์ œํ•œ๋„ 6์ดˆ๋ผ์„œ ํ†ต๊ณผํ•  ์ค„ ์•Œ์•˜์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ์— ๋ง‰ํ˜€๋ฒ„๋ ธ๋‹ค.

 

๋ช‡ ๋ฒˆ์ด๋‚˜ ์‹œ๋„ํ•ด๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์–ด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ JAVA์— TreeMap์ด ์žˆ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

TreeMap์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค.

https://melody-coding.tistory.com/317

 

[์ž๋ฃŒ๊ตฌ์กฐ] TreeMap

โ“ TreeMap ์ด๋ž€?์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ Map ์ปฌ๋ ‰์…˜๊ฐ์ฒด ์ €์žฅ ์‹œ ์ž๋™ ์ •๋ ฌ(default : ์˜ค๋ฆ„์ฐจ์ˆœ)   โ“TreeMap ์„ ์–ธTreeMap map=new TreeMap();  โ“ TreeMap ์ถ”๊ฐ€, ์‚ญ์ œ// ์ถ”๊ฐ€map.put(1,1);// ์‚ญ์ œmap.remove(1);   โ“ T

melody-coding.tistory.com

 

 

TreeMap์„ ์‚ฌ์šฉํ•ด์„œ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๊ด€๋ฆฌํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณ„์†ํ•ด์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์ผ ๋•Œ ์ดˆ๊ธฐํ™”๋ฅผ ์•ˆ ํ•ด์ค€ ๊ฒƒ๊ณผ ์ถœ๋ ฅ๋ฌธ์—์„œ ๊ฐœํ–‰์„ ๋น ํŠธ๋ ค ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์ด ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์„œ ํ†ต๊ณผํ–ˆ๋‹ค.

 

์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฝ”๋“œ (Java)

๋”๋ณด๊ธฐ

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
	static ArrayList<String> arr;
	public static void main(String[] args) throws IOException{
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		
		int t=Integer.parseInt(bf.readLine());
		
		PriorityQueue<Integer> queue=new PriorityQueue<>();
		PriorityQueue<Integer> queue2=new PriorityQueue<>(Collections.reverseOrder());
		
		for(int i=0; i<t; i++) {
			int k=Integer.parseInt(bf.readLine());
			for(int j=0; j<k; j++) {
				st=new StringTokenizer(bf.readLine());
				char cmd=st.nextToken().charAt(0);
				int num=Integer.parseInt(st.nextToken());
				
				if(cmd=='I') {
					queue.add(num);
					queue2.add(num);
				}else if(cmd=='D' && queue.size()>0) {
					if(num==1) {
						int temp=queue2.poll();
						queue.remove(temp);
					}else {
						int temp=queue.poll();
						queue2.remove(temp);
					}
				}
			}
			if(queue.size()==0) {
				bw.write("EMPTY\n");
			}else {
				bw.write(queue2.peek()+" "+queue.peek());
			}
		}
		bw.flush();
	}
}

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class _7662_ { // ์ด์ค‘ ์šฐ์„ ์ˆœ์œ„ ํ 
	static ArrayList<String> arr;
	public static void main(String[] args) throws IOException{
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		int t=Integer.parseInt(bf.readLine());

		for(int i=0; i<t; i++) {
			TreeMap<Integer, Integer> map=new TreeMap<>();
			int k=Integer.parseInt(bf.readLine());
			for(int j=0; j<k; j++) {
				st=new StringTokenizer(bf.readLine());
				char cmd=st.nextToken().charAt(0);
				int num=Integer.parseInt(st.nextToken());

				if(cmd=='I') {
					if(map.containsKey(num)) {
						map.put(num, map.get(num)+1);
					}else {
						map.put(num, 1);
					}

				}else if(cmd=='D' && map.size()>0) {
					if(num==1) {
						if(map.lastEntry().getValue()==1) {
							map.remove(map.lastKey());
						}else {
							map.put(map.lastKey(), map.lastEntry().getValue()-1);
						}
					}else {
						if(map.firstEntry().getValue()==1) {
							map.remove(map.firstKey());
						}else {
							map.put(map.firstKey(), map.firstEntry().getValue()-1);
						}
					}
				}
			}
			if(map.size()==0) {
				bw.write("EMPTY\n");
			}else {
				bw.write(map.lastKey()+" "+map.firstKey()+"\n");
			}
		}
		bw.flush();
	}
}

 

Main

- ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค(t) ์ž…๋ ฅ

- map : ์ •์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” TreeMap <์ •์ˆ˜, ์ •์ˆ˜ ๊ฐœ์ˆ˜>

- ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜(k) ์ž…๋ ฅ

- ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ์—ฐ์‚ฐ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž(cmd)์™€ ์ •์ˆ˜(num) ์ž…๋ ฅ -> ๋ฌธ์ž๊ฐ€ I์ด๋ฉด ์‚ฝ์ž…์ด๋ฏ€๋กœ map์— ์ถ”๊ฐ€ (๊ฐ™์€ ๊ฐ’์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด ํŒ๋‹จ) / ๋ฌธ์ž๊ฐ€ D์ด๋ฉด ์‚ญ์ œ์ด๋ฏ€๋กœ map์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์‚ญ์ œ (๊ฐ™์€ ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ ์ผ ๋•Œ์™€ ํ•˜๋‚˜์ผ ๋•Œ๋ฅผ ๋‚˜๋ˆ„์–ด ํŒ๋‹จ)

- map์ด ๋น„์–ด์žˆ๋‹ค๋ฉด "EMPTY" ์ถœ๋ ฅ / ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’ ์ถœ๋ ฅ

 



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 1043_๊ฑฐ์ง“๋ง  (0) 2023.06.26
[Baekjoon] 12893_์ ์˜ ์   (0) 2023.06.26
[Baekjoon] 19538_๋ฃจ๋จธ  (0) 2023.06.15
[Baekjoon] 13265_์ƒ‰์น ํ•˜๊ธฐ  (0) 2023.06.13
[Baekjoon] 11060_์ ํ”„ ์ ํ”„  (0) 2023.06.12