์ฝ๋
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์ด ์ด๋ค ๊ฒฝ์ฐ์ ๋ฐ์ํ๋์ง, ๋จ์ ์์
๋ค์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง์ ๋ํ ์ดํด๊ฐ ํ์ํ ๋ฌธ์ ์ด๋ค.