[Python - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level2] ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

2021. 1. 19. 04:30ใ†๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

๋ฐ˜์‘ํ˜•
 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

ํŠธ๋Ÿญ ์—ฌ๋Ÿฌ ๋Œ€๊ฐ€ ๊ฐ•์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์ผ ์ฐจ์„  ๋‹ค๋ฆฌ๋ฅผ ์ •ํ•ด์ง„ ์ˆœ์œผ๋กœ ๊ฑด๋„ˆ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋Ÿญ์€ 1์ดˆ์— 1๋งŒํผ ์›€์ง์ด๋ฉฐ, ๋‹ค๋ฆฌ ๊ธธ์ด

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

ํŠธ๋Ÿญ ์—ฌ๋Ÿฌ ๋Œ€๊ฐ€ ๊ฐ•์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์ผ ์ฐจ์„  ๋‹ค๋ฆฌ๋ฅผ ์ •ํ•ด์ง„ ์ˆœ์œผ๋กœ ๊ฑด๋„ˆ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋Ÿญ์€ 1์ดˆ์— 1๋งŒํผ ์›€์ง์ด๋ฉฐ, ๋‹ค๋ฆฌ ๊ธธ์ด๋Š” bridge_length์ด๊ณ  ๋‹ค๋ฆฌ๋Š” ๋ฌด๊ฒŒ weight๊นŒ์ง€ ๊ฒฌ๋”ฅ๋‹ˆ๋‹ค.
โ€ป ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ์— ์™„์ „ํžˆ ์˜ค๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ด ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธธ์ด๊ฐ€ 2์ด๊ณ  10kg ๋ฌด๊ฒŒ๋ฅผ ๊ฒฌ๋””๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๊ฒŒ๊ฐ€ [7, 4, 5, 6]kg์ธ ํŠธ๋Ÿญ์ด ์ˆœ์„œ๋Œ€๋กœ ์ตœ๋‹จ ์‹œ๊ฐ„ ์•ˆ์— ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฑด๋„ˆ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ฒฝ๊ณผ ์‹œ๊ฐ„ ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚œ ํŠธ๋Ÿญ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋Š” ํŠธ๋Ÿญ ๋Œ€๊ธฐ ํŠธ๋Ÿญ
0 [] [] [7,4,5,6]
1~2 [] [7] [4,5,6]
3 [7] [4] [5,6]
4 [7] [4,5] [6]
5 [7,4] [5] [6]
6~7 [7,4,5] [6] []
8 [7,4,5,6] [] []

๋”ฐ๋ผ์„œ, ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋ ค๋ฉด ์ตœ์†Œ 8์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋‹ค๋ฆฌ ๊ธธ์ด bridge_length, ๋‹ค๋ฆฌ๊ฐ€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ weight, ํŠธ๋Ÿญ๋ณ„ ๋ฌด๊ฒŒ truck_weights๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • bridge_length๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • weight๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • truck_weights์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋Š” 1 ์ด์ƒ weight ์ดํ•˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

ํ’€์ด ๊ณผ์ •

์Šคํƒ๊ณผ ํ ๋ฒ”์ฃผ์— ์žˆ๋Š” ๋ฌธ์ œ ์˜€๋Š”๋ฐ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์—” ? truck์—์„œ ์ ค ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํŠธ๋Ÿญ์ด ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ deque๋ฅผ ์“ฐ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

- ๋‹ค๋ฆฌ๊ธธ์ด๋งŒํผ ์ง€๋‚˜์•ผํ•˜๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€ !?

ํ˜„์žฌ ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๊ณ  ์žˆ๋Š” ์ค‘์ธ ํŠธ๋Ÿญ๋“ค์„ ๋‹ด๊ธฐ ์œ„ํ•œ tmp_truck์ด๋ผ๋Š” deque๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ•˜์—ฌ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋งŽ์ด ํ‹€๋ ธ์—ˆ๋‹ค. ๋‹ค๋ฆฌ ๊ธธ์ด๋งŒํผ truck์ด ์ง€๋‚˜์•ผํ•˜๋ฏ€๋กœ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ๊ฒ€์‚ฌํ•ด์•ผํ• ๊นŒ ๊ณ ๋ฏผํ•˜๋˜ ์ค‘ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒŒ๋˜์—ˆ๋‹ค. ์ด๋•Œ ์–ป๊ฒŒ๋œ ํžŒํŠธ๋Š” tmp_truck์„ ๋นˆ ํ๊ฐ€ ์•„๋‹Œ 0์œผ๋กœ ์ฑ„์›Œ์ง„ ๋‹ค๋ฆฌ ๊ธธ์ด๋งŒํผ์˜ ํ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์˜€๋‹ค. 

- sum()์˜ ์‹œ๊ฐ„์ดˆ๊ณผ ๋ฌธ์ œ

sum()์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ์ค‘์ธ ํŠธ๋Ÿญ๋“ค์˜ ํ•ฉ์„ ๊ตฌํ–ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 5๋ฒˆ์—์„œ ๊ณ„์† ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ ์งˆ๋ฌธ์„ ์ฐพ์•„๋ณด๋‹ˆ sum()์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ๋ž˜์„œ sum์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ์ค‘์ธ ํŠธ๋Ÿญ๋“ค์˜ ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•˜๋‹ค ์ƒ๊ฐํ•ด๋‚ธ ๋ฐฉ๋ฒ•์€ ๊ทธ๋ƒฅ tmp_truck์—์„œ ํ•˜๋‚˜์”ฉ ๋„ฃ๊ฑฐ๋‚˜ ๋บ„๋•Œ sum_truck์˜ ๊ฐ’๋„ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด์˜€๋‹ค.

from collections import deque


def solution(bridge_length, weight, truck_weights):
    truck_weights = deque(truck_weights)
    tmp_truck = deque([0] * bridge_length)
    timer = 0
    sum_truck = 0
    while tmp_truck:
        timer += 1
        sum_truck -= tmp_truck.popleft()

        if truck_weights:
            if sum_truck + truck_weights[0] <= weight:
                pop_truck = truck_weights.popleft()
                tmp_truck.append(pop_truck)
                sum_truck += pop_truck
            else:
                tmp_truck.append(0)
    return timer


if __name__ == "__main__":
    print(solution(2, 10, [7, 4, 5, 6]))
    print(solution(100, 100, [10]))
    print(solution(100, 100, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]))

 

 

Python, Python ๋ฐฑ์ค€, Python ๋ฐฑ์ค€ 18258, python ์•Œ๊ณ ๋ฆฌ์ฆ˜, Python ํ 2, ๋ฐฑ์ค€ 18258 ํŒŒ์ด์ฌ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ 2, ํŒŒ์ด์ฌ, ํŒŒ์ด์ฌ ๋ฐฑ์ค€, ํŒŒ์ด์ฌ ํ 2

 

๋ฐ˜์‘ํ˜•