๐Ÿฅž BE
home

621_Task Scheduler

๋‹ด๋‹น์ž
์™„๋ฃŒ ์—ฌ๋ถ€
Solved
์š”์•ฝ
๋‚ ์งœ
2024/08/27
ํƒœ๊ทธ
๊ทธ๋ฆฌ๋””
๋‚œ์ด๋„
Medium
์ถœ์ฒ˜
LeetCode

์ฝ”๋“œ

import java.util.Arrays; class Solution { public int leastInterval(char[] tasks, int n) { // ๊ฐ ์ž‘์—…์˜ ๋นˆ๋„์ˆ˜ ๊ณ„์‚ฐ ๋ฐ ์ดˆ๊ธฐํ™” (๋ฌธ์ž ๋‹จ์œ„) // ex) 'A'๋Š” freq[0], 'B'๋Š” freq[1], ... int[] freq = new int[26]; for (char c : tasks) { freq[c - 'A']++; } Arrays.sort(freq); // ๋นˆ๋„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ int maxFreq = freq[25]; // ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์˜จ ๋นˆ๋„ int idle = (maxFreq - 1) * n; // ์ดˆ๊ธฐ ์•„์ด๋“ค ํƒ€์ž„ ๊ณ„์‚ฐ // ๋‚จ์€ ์ž‘์—…๋“ค๋กœ ์•„์ด๋“ค ์‹œ๊ฐ„ ์ฑ„์›€ -> ๋น„๊ตํ•ด์„œ ๋” ์ž‘์€ ๊ฐ’์„ ์ดˆ๊ธฐ ์•„์ด๋“ค ํƒ€์ž„์—์„œ ๋นผ์คŒ. for (int i = 24; i >= 0 && idle > 0; i--) { idle -= Math.min(maxFreq - 1, freq[i]); } // idle์ด 0๋ณด๋‹ค ์ž‘์„ ์ˆ˜๋Š” ์—†๊ธฐ์—, ์Œ์ˆ˜๊ฐ€ ๋˜๋ฉด 0์œผ๋กœ ๋ณด์ •ํ•ด์คŒ. idle = Math.max(0, idle); // ์ตœ์ข…์ ์œผ๋กœ ์ „์ฒด ์ž‘์—… ๊ฐœ์ˆ˜ + ์ƒ์„ฑ๋œ ์•„์ด๋“ค ์ž‘์—… ๊ฐœ์ˆ˜๊ฐ€ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๊ฐฏ์ˆ˜๊ฐ€ ๋จ. return tasks.length + idle; } }
Java
๋ณต์‚ฌ
์˜ˆ์‹œ
tasks = [โ€Aโ€, โ€œAโ€, โ€œAโ€, โ€œBโ€, โ€œCโ€, โ€œDโ€], n = 2
freq = [0, 0, 0, โ€ฆ , 1, 1, 1, 3] ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.
โ†’ maxFreq = 3
์ดˆ๊ธฐ idle๊ฐ’ = (3 - 1) * 2 = 4 โ‡’ A _ _ A _ _ A
โ†’ ๊ฐ™์€ ์ž‘์—…์ด 3๋ฒˆ ๋“ฑ์žฅํ•˜๋ ค๋ฉด ์ตœ์†Œ 2๊ฐœ์˜ ๊ฐ„๊ฒฉ์ด ํ•„์š”ํ•˜๋ฉฐ, (3 - 1)
โ†’ ๊ฐ ๊ฐ„๊ฒฉ์€ ์ตœ์†Œ 2๊ฐœ์˜ ์•„์ด๋“ค ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. * 2
๋‹ค์Œ์€ ๋‚จ์€ ์ž‘์—…์œผ๋กœ idle ์‹œ๊ฐ„์„ ์ฑ„์šด๋‹ค. ์œ„์˜ ๊ฐ„๊ฒฉ์— ๋”ฐ๋ผ( _ _ ) 2, 1, 0 ๋นˆ๋„์ธ ์ž‘์—…๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, freq ๋ฐฐ์—ด์—์„œ ํ•ด๋‹นํ•˜๋Š” ์ž‘์—…์ธ B, C, D๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฝ์ž…๋œ๋‹ค. โ‡’ A B C A D _ A โ†’ ๋”ฐ๋ผ์„œ ์ตœ์ข… idle ๊ฐœ์ˆ˜๋Š” 1์ด ๋œ๋‹ค.
์ตœ์†Œ ์ž‘์—… ํšŸ์ˆ˜ = ์ „์ฒด task ์ˆ˜(6๊ฐœ) + ์ตœ์ข… idle ์ˆ˜ (1๊ฐœ)๋กœ ์ด 7๋ฒˆ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์†Œ์˜ ๊ฒฝ์šฐ.

๋ฌธ์ œ ํ•ด๊ฒฐ ์•„์ด๋””์–ด

idle์ด ์–ด๋–ค ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š”์ง€, ๋‚จ์€ ์ž‘์—…๋“ค์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•œ ๋ฌธ์ œ์ด๋‹ค.