ํด๋น ๊ฒ์๋ฌผ์ [Programmers/javascript] ๋์คํฌ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑ๋์์์ ๋ฏธ๋ฆฌ ๋ฐํ๋๋ค.
ํ๋๋์คํฌ๋ ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ํํ ์ ์์ต๋๋ค. ๋์คํฌ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์์ฒญ์ด ๋ค์ด์จ ์์๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ๋ค์ด
- 0ms ์์ ์ 3ms๊ฐ ์์๋๋ A์์
์์ฒญ
- 1ms ์์ ์ 9ms๊ฐ ์์๋๋ B์์
์์ฒญ
- 2ms ์์ ์ 6ms๊ฐ ์์๋๋ C์์
์์ฒญ
์ ๊ฐ์ ์์ฒญ์ด ๋ค์ด์์ต๋๋ค. ์ด๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
ํ ๋ฒ์ ํ๋์ ์์ฒญ๋ง์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์์ ์ ์์ฒญ๋ฐ์ ์์๋๋ก ์ฒ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌ ๋ฉ๋๋ค.
- A: 3ms ์์ ์ ์์
์๋ฃ (์์ฒญ์์ ์ข
๋ฃ๊น์ง : 3ms)
- B: 1ms๋ถํฐ ๋๊ธฐํ๋ค๊ฐ, 3ms ์์ ์ ์์
์ ์์ํด์ 12ms ์์ ์ ์์
์๋ฃ(์์ฒญ์์ ์ข
๋ฃ๊น์ง : 11ms)
- C: 2ms๋ถํฐ ๋๊ธฐํ๋ค๊ฐ, 12ms ์์ ์ ์์
์ ์์ํด์ 18ms ์์ ์ ์์
์๋ฃ(์์ฒญ์์ ์ข
๋ฃ๊น์ง : 16ms)
์ด ๋ ๊ฐ ์์ ์ ์์ฒญ๋ถํฐ ์ข ๋ฃ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ์ ํ๊ท ์ 10ms(= (3 + 11 + 16) / 3)๊ฐ ๋ฉ๋๋ค.
ํ์ง๋ง A โ C โ B ์์๋๋ก ์ฒ๋ฆฌํ๋ฉด
- A: 3ms ์์ ์ ์์
์๋ฃ(์์ฒญ์์ ์ข
๋ฃ๊น์ง : 3ms)
- C: 2ms๋ถํฐ ๋๊ธฐํ๋ค๊ฐ, 3ms ์์ ์ ์์
์ ์์ํด์ 9ms ์์ ์ ์์
์๋ฃ(์์ฒญ์์ ์ข
๋ฃ๊น์ง : 7ms)
- B: 1ms๋ถํฐ ๋๊ธฐํ๋ค๊ฐ, 9ms ์์ ์ ์์
์ ์์ํด์ 18ms ์์ ์ ์์
์๋ฃ(์์ฒญ์์ ์ข
๋ฃ๊น์ง : 17ms)
์ด๋ ๊ฒ A โ C โ B์ ์์๋ก ์ฒ๋ฆฌํ๋ฉด ๊ฐ ์์ ์ ์์ฒญ๋ถํฐ ์ข ๋ฃ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ์ ํ๊ท ์ 9ms(= (3 + 7 + 17) / 3)๊ฐ ๋ฉ๋๋ค.
๊ฐ ์์ ์ ๋ํด [์์ ์ด ์์ฒญ๋๋ ์์ , ์์ ์ ์์์๊ฐ]์ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด jobs๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ ์ ์์ฒญ๋ถํฐ ์ข ๋ฃ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ์ ํ๊ท ์ ๊ฐ์ฅ ์ค์ด๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ํ๊ท ์ด ์ผ๋ง๊ฐ ๋๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. (๋จ, ์์์ ์ดํ์ ์๋ ๋ฒ๋ฆฝ๋๋ค)
jobs | return |
---|---|
[[0, 3], [1, 9], [2, 6]] | 9 |
์ ์ถ๋ ฅ ์ ์ค๋ช
๋ฌธ์ ์ ์ฃผ์ด์ง ์์ ๊ฐ์ต๋๋ค.
๋ฌธ์ ๊ฐ ์ ์ํ๋ฆฐ๋ค๋ฉด๐ข
ํํธ๊ฐ ํ์ํ๊ฐ์? [์ฝ๋ฉํ ์คํธ ์ฐ์ต ํํธ ๋ชจ์์ง]์ผ๋ก ์ค์ธ์! โ ํด๋ฆญ
function solution(jobs) {
// job์ ์์๋๋ก ์ ๋ ฌ
jobs.sort((a,b) => a[0] - b[0])
// ์ ๋ต ์๊ฐ
let answer = 0
// ๋์คํฌ ํ
const queue = []
const len = jobs.length
let i = 0
let cur = 0
// ๋์คํฌ๊ฐ ๋จ๊ฑฐ๋ ๋์คํฌ ํ์ ์์ฌ ๋์คํฌ๊ฐ ์๋ ๊ฒฝ์ฐ
while(i < len || queue.length > 0) {
// ํ์์ ๊ณผ ๊ฐ๊ฑฐ๋ ์ด์ ์์
๋ค์ ๋ชจ๋ ํ์ ์
๋ ฅ
if(i < len && jobs[i][0] <= cur) {
queue.push(jobs[i++])
continue
}
// ์คํ์ด ๊ฐ๋ฅํ ๋์คํฌ ํ ์ค ์คํ์๊ฐ์ ๋ฐ๋ฅธ ์ค๋ฆ์ฐจ ์ ์ ๋ ฌ
queue.sort((a,b) => a[1]-b[1])
// ํ์ ๋์คํฌ๊ฐ ์๋ค๋ฉด
if(queue.length > 0) {
const job = queue.shift()
// ๋๋ ์๊ฐ์ ํ ์๊ฐ์ ๋ํ๊ณ
cur += job[1]
// ๋๊ธฐํ ์๊ฐ ์ ๊ฑฐ
answer += cur-job[0]
} else {
// ํ์ ๋์คํฌ๊ฐ ์๋ค๋ฉด ํ ๋์คํฌ์ ์์์๊ฐ์ด ํ์ฌ ์๊ฐ
cur = jobs[i][0]
}
}
return answer/len >> 0
}