๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํ„ฐ๋”” 9์ฃผ์ฐจ] ํž™ ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ Lv.3 - ํŒŒ์ด์ฌ(Python)

๐Ÿ“‘ ๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/42627

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ

ํ•˜๋“œ๋””์Šคํฌ๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ

programmers.co.kr

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

ํ•˜๋“œ๋””์Šคํฌ๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด

- 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 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋“œ๋””์Šคํฌ๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์ง€ ์•Š์„ ๋•Œ์—๋Š” ๋จผ์ € ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ž‘์—…๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ์•„ ์ด ๋ฌธ์ œ, ํ’€์ด ๊ฐ€๋‹ฅ์„ ๋ชป ์žก์•„์„œ ์–ด๋ ค์› ๋‹ค! (ใ… ใ… )

 

๐Ÿ’ก ํ•ต์‹ฌ์€ ์†Œ์š” ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์ ์€ ์ž‘์—…๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ‰๊ท ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 ํ‰๊ท ๊ฐ’์€ N๊ฐœ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ, ๊ฐ ์ž‘์—…๋“ค์˜ (๋Œ€๊ธฐ์‹œ๊ฐ„+์†Œ์š”์‹œ๊ฐ„)์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’์— N์„ ๋‚˜๋ˆˆ ๊ฒƒ์ด๋‹ค.

 

 

โœ”๏ธ ์†Œ์š”์‹œ๊ฐ„์ด ์งง์€ ์ˆœ๋Œ€๋กœ ์ž‘์—…์„ ์ •๋ ฌํ•œ๋‹ค.

โœ”๏ธ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…(์ž‘์—…์ด ์š”์ฒญ๋œ ์‹œ์ ์ด ํ˜„์žฌ ๊ธฐ์ค€์œผ๋กœ ์ด์ „์ธ ๊ฒƒ)์„ ์ฐพ๋Š”๋‹ค. ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด๋ผ๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋ฐœ๊ฒฌ๋œ ๊ฒƒ์ด ์†Œ์š”์‹œ๊ฐ„์ด ์ œ์ผ ์งง์€ ๊ฒƒ์ด๋ฏ€๋กœ, ์ด๋ฅผ ๋ฆฌ์ŠคํŠธ์—์„œ ๊บผ๋‚ธ๋‹ค. ํ•ด๋‹น ์ž‘์—…์„ ์ฒ˜๋ฆฌํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์— ์ž‘์—… ์†Œ์š”์‹œ๊ฐ„์„ ๋”ํ•ด์ฃผ๊ณ , ํ•ด๋‹น ์ž‘์—…์˜ (๋Œ€๊ธฐ์‹œ๊ฐ„+์†Œ์š”์‹œ๊ฐ„)์„ ์ •๋‹ต ๋ณ€์ˆ˜์— ๋”ํ•œ๋‹ค.

โœ”๏ธ ๋ชจ๋“  ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์‚ดํŽด๋„ ํ˜„์žฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ์—†๋‹ค๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„์— 1์„ ๋”ํ•ด์ฃผ๊ณ  ๋‹ค์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

โœ”๏ธ ๋ชจ๋“  ์ž‘์—…์„ ๋‹ค ์‚ดํˆ์„ ๋•Œ, ์ •๋‹ต ๋ณ€์ˆ˜๋ฅผ ์ด ์ž‘์—…์˜ ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆ  ํ‰๊ท ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ํŒŒ์ด์ฌ(Python)

import heapq
def solution(jobs):
    answer = 0
    time = 0
    n = len(jobs)
    # ์†Œ์š”์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
    jobs = sorted(jobs, key=lambda x: x[1])
    while jobs:
        for i in range(len(jobs)):
            if jobs[i][0]<=time: #์ˆ˜ํ–‰๊ฐ€๋Šฅํ•œ๋ฐ ์†Œ์š”์‹œ๊ฐ„๋„ ์ œ์ผ ์งง๋‹ค๋ฉด ์ˆ˜ํ–‰ํ•œ๋‹ค
                answer += (time-jobs[i][0]+jobs[i][1]) #๋Œ€๊ธฐ์‹œ๊ฐ„+์ˆ˜ํ–‰์‹œ๊ฐ„
                time += jobs[i][1]
                jobs.pop(i)
                break
            if jobs and i==len(jobs)-1: time+=1 #ํ˜„์žฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ์•„๋ฌด ๊ฒƒ๋„ ์—†๋‹ค๋ฉด
    return answer//n

jobs = [[0, 3], [1, 9], [2, 6]]
print(solution(jobs))

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ