๋ฌธ์ (์ถ์ฒ: 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_์์น ํ๊ธฐ (1) | 2023.06.13 | 
| [Baekjoon] 11060_์ ํ ์ ํ (0) | 2023.06.12 |