๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ

๋ฟŒ์•ผ._. 2026. 7. 29. 11:04
๋ฌธ์ œ
https://school.programmers.co.kr/learn/courses/30/lessons/42627
 

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

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

programmers.co.kr

 

 


< ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ >

 

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

import java.util.*;

class Solution {
	public int solution(int[][] jobs) {
		int answer = 0;

		Arrays.sort(jobs, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				return o1[0] - o2[0];
			}
		});

		PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if (o1[2] == o2[2]) {
					if (o1[1] == o2[1]) {
						return o1[0] - o2[0];
					}
					return o1[1] - o2[1];
				}
				return o1[2] - o2[2];
			}
		});

		int idx = 0, time = 0;

		while (idx < jobs.length) {
			while (idx < jobs.length && time >= jobs[idx][0]) {
				queue.add(new int[] { idx, jobs[idx][0], jobs[idx][1] });
				idx += 1;
			}
			if (queue.isEmpty()) {
				time = jobs[idx][0];
				while (idx < jobs.length && time >= jobs[idx][0]) {
					queue.add(new int[] { idx, jobs[idx][0], jobs[idx][1] });
					idx += 1;
				}
			}
			int job[] = queue.poll();
			if (time < job[1]) {
				time = job[1] + job[2];
			} else {
				time += job[2];
			}
			answer += time - job[1];
		}

		while (!queue.isEmpty()) {
			int job[] = queue.poll();

			if (time < job[1]) {
				time = job[1] + job[2];
			} else {
				time += job[2];
			}
			answer += time - job[1];
		}

		answer /= jobs.length;

		return answer;
	}
}

 

jobs๋ฅผ ์ž‘์—…์˜ ์š”์ฒญ ์‹œ๊ฐ์ด ๋น ๋ฅธ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ž‘์—…์˜ ์†Œ์š” ์‹œ๊ฐ„์ด ์งง์€ ๊ฒƒ, ์ž‘์—…์˜ ์š”์ฒญ ์‹œ๊ฐ์ด ๋น ๋ฅธ ๊ฒƒ, ์ž‘์—…์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋„๋ก ์„ ์–ธํ•œ๋‹ค. ๋ชจ๋“  ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋„๋ก ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1. ํ˜„์žฌ ์‹œ๊ฐ„๋ณด๋‹ค ์ž‘์—… ์š”์ฒญ ์‹œ๊ฐ์ด ๋น ๋ฅธ ์ž‘์—…๋“ค์„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ถ”๊ฐ€

2. ํ˜„์žฌ ์‹œ๊ฐ„์— ์š”์ฒญ๋œ ์ž‘์—…์ด ์—†์–ด ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ ๋ฐ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ถ”๊ฐ€

3. queue poll

4. ํ˜„์žฌ ์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ ๋ฐ ์š”์ฒญ ์ž‘์—…์˜ ๋ฐ˜ํ™˜ ์‹œ๊ฐ„์„ ๊ตฌํ•ด answer์— ๋”ํ•˜๊ธฐ

 

๋งŒ์•ฝ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ž‘์—…์ด ๋‚จ์•„์žˆ๋‹ค๋ฉด ์œ„์˜ 3~4๋ฒˆ์„ ๋ฐ˜๋ณตํ•ด ์ค€๋‹ค. ์ตœ์ข… answer์˜ ๊ฐ’์„ jobs์˜ ๊ธธ์ด๋กœ ๋‚˜๋ˆˆ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 



 

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