๐Ÿ’ฟ[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ

Chobbyยท2022๋…„ 9์›” 15์ผ
1

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
40/349

ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์€ [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์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 500 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • jobs์˜ ๊ฐ ํ–‰์€ ํ•˜๋‚˜์˜ ์ž‘์—…์— ๋Œ€ํ•œ [์ž‘์—…์ด ์š”์ฒญ๋˜๋Š” ์‹œ์ , ์ž‘์—…์˜ ์†Œ์š”์‹œ๊ฐ„] ์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์ž‘์—…์— ๋Œ€ํ•ด ์ž‘์—…์ด ์š”์ฒญ๋˜๋Š” ์‹œ๊ฐ„์€ 0 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์ž‘์—…์— ๋Œ€ํ•ด ์ž‘์—…์˜ ์†Œ์š”์‹œ๊ฐ„์€ 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋“œ๋””์Šคํฌ๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์ง€ ์•Š์„ ๋•Œ์—๋Š” ๋จผ์ € ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ž‘์—…๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿฆ‹์ž…์ถœ๋ ฅ ์˜ˆ

jobsreturn
[[0, 3], [1, 9], [2, 6]]9

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • 0ms ์‹œ์ ์— 3ms ๊ฑธ๋ฆฌ๋Š” ์ž‘์—… ์š”์ฒญ์ด ๋“ค์–ด์˜ต๋‹ˆ๋‹ค.
  • 1ms ์‹œ์ ์— 9ms ๊ฑธ๋ฆฌ๋Š” ์ž‘์—… ์š”์ฒญ์ด ๋“ค์–ด์˜ต๋‹ˆ๋‹ค.
  • 2ms ์‹œ์ ์— 6ms ๊ฑธ๋ฆฌ๋Š” ์ž‘์—… ์š”์ฒญ์ด ๋“ค์–ด์˜ต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์ž˜ ์•ˆํ’€๋ฆฐ๋‹ค๋ฉด๐Ÿ˜ข

ํžŒํŠธ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”? [์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต ํžŒํŠธ ๋ชจ์Œ์ง‘]์œผ๋กœ ์˜ค์„ธ์š”! โ†’ ํด๋ฆญ

๐Ÿ•ท๋‚˜์˜ ํ’€์ด

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
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€