๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] ๊ณผ์ œ ์ง„ํ–‰ํ•˜๊ธฐ

๋ฟŒ์•ผ._. 2026. 6. 2. 11:30
๋ฌธ์ œ
https://school.programmers.co.kr/learn/courses/30/lessons/176962
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 


< ๊ณผ์ œ ์ง„ํ–‰ํ•˜๊ธฐ >

 

๋ฌธ์ œ ํ’€์ด (Java)

import java.util.*;

class Solution {
	static class Plan {
		private String name;
		private int start;
		private int playtime;

		public Plan(String name, int start, int playtime) {
			this.name = name;
			this.start = start;
			this.playtime = playtime;
		}
	}

	public String[] solution(String[][] plans) {
		String[] answer = new String[plans.length];

		PriorityQueue<Plan> queue = new PriorityQueue<>(new Comparator<Plan>() {
			@Override
			public int compare(Plan o1, Plan o2) {
				return o1.start - o2.start;
			}
		});

		for (int i = 0; i < plans.length; i++) {
			int start = Integer.parseInt(plans[i][1].split(":")[0]) * 60 + Integer.parseInt(plans[i][1].split(":")[1]);
			queue.add(new Plan(plans[i][0], start, Integer.parseInt(plans[i][2])));
		}

		Stack<Plan> stack = new Stack<>();
		int idx = 0, now = 0;

		while (!queue.isEmpty()) {
			if (stack.isEmpty()) {
				stack.add(queue.poll());
				now = stack.peek().start;
			} else if (now + stack.peek().playtime > queue.peek().start) {
				stack.peek().playtime -= (queue.peek().start - now);
				stack.add(queue.poll());
				now = stack.peek().start;
			} else {
				now += stack.peek().playtime;
				answer[idx++] = stack.pop().name;
			}
		}

		while (!stack.isEmpty()) {
			answer[idx++] = stack.pop().name;
		}

		return answer;
	}
}

 

๊ณผ์ œ ์ด๋ฆ„, ๊ณผ์ œ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๋ถ„์œผ๋กœ ํ†ต์ผํ•œ ์‹œ๊ฐ„, ๊ณผ์ œ ๋งˆ์น˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•œ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ์— ๊ณผ์ œ ๊ณ„ํš์„ ๊ฐ์ฒด๋กœ ์ €์žฅํ•˜์—ฌ ๊ณผ์ œ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๋น ๋ฅธ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.  

1) stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด queue์—์„œ poll ํ•œ ๊ฐ’์„ ์ €์žฅ ๋ฐ ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ณผ์ œ ์‹œ์ž‘ ์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

2) ์ƒˆ๋กœ์šด ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•  ์‹œ๊ฐ์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ธฐ์กด์— ์ง„ํ–‰ ์ค‘์ด๋˜ ๊ณผ์ œ๋ฅผ ๋ฉˆ์ถ”๊ณ  ์ƒˆ๋กœ์šด ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. ์ด๋•Œ, ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•œ ๋งŒํผ ๊ณผ์ œ๋ฅผ ๋งˆ์น˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ํ˜„์žฌ ์‹œ๊ฐ„๋„ ์ƒˆ๋กœ์šด ๊ณผ์ œ ์‹œ์ž‘ ์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. 

3) ์ง„ํ–‰ ์ค‘์ด๋˜ ๊ณผ์ œ๋ฅผ ๋๋ƒˆ๋‹ค๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ณผ์ œ ๋๋‚œ ์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  answer์— stack์—์„œ pop ํ•œ ๊ฐ’์˜ ๊ณผ์ œ ์ด๋ฆ„์„ ์ €์žฅํ•œ๋‹ค.

 

stack์ด ๋นŒ ๋•Œ๊นŒ์ง€ pop ํ•˜์—ฌ ๊ณผ์ œ ์ด๋ฆ„์„ answer์— ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•œ๋‹ค. ์ตœ์ข… answer์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

 



 

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, 
https://school.programmers.co.kr/learn/challenges