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

Algorithm/Programmers

[Programmers] ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

 

 

๋ฌธ์ œ 

 

ํŠธ๋Ÿญ ์—ฌ๋Ÿฌ ๋Œ€๊ฐ€ ๊ฐ•์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์ผ์ฐจ์„  ๋‹ค๋ฆฌ๋ฅผ ์ •ํ•ด์ง„ ์ˆœ์œผ๋กœ ๊ฑด๋„ˆ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฆฌ์—๋Š” ํŠธ๋Ÿญ์ด ์ตœ๋Œ€ 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 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

 

ํ•ด์„ค ์ฝ”๋“œ 
def solution(bridge_length, weight, truck_weights):
# ํŠธ๋Ÿญ์— ์„ธ์šธ ์ˆ˜ ์žˆ๋Š” ํŠธ๋Ÿญ์˜ ๊ฐœ์ˆ˜๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. 
    trucks_on_bridge = [0] * bridge_length
    time = 0 
    # ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ์œ„์— ์กด์žฌํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค. 
    while len(trucks_on_bridge) != 0:
        time += 1
        trucks_on_bridge.pop(0)
        # ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋Ÿญ์ด ์กด์žฌํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ๋กœ ๋Œ€๊ธฐ์ค‘์ธ ํŠธ๋Ÿญ๊ณผ ํ˜„์žฌ๊นŒ์ง€ ๋‹ค๋ฆฌ ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ์˜ ํ•ฉ์ด
        # weight ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ ๋‹ค๋ฆฌ ์œ„๋กœ ๋Œ€๊ธฐ ์ค‘์ธ ์ฒซ ๋ฒˆ์งธ ํŠธ๋Ÿญ์„ ๋ณด๋‚ด๊ณ  ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋Ÿญ
        # ๋ฐฐ์—ด์—์„œ๋Š” ํ•ด๋‹น ํŠธ๋Ÿญ์„ pop ํ•œ๋‹ค. 
        if truck_weights:
            if sum(trucks_on_bridge) + truck_weights[0] <= weight:
                trucks_on_bridge.append(truck_weights.pop(0))
            else:
                trucks_on_bridge.append(0)
    return time
๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ (time) ๋‹ค๋ฆฌ ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ (trucks_on_bridge) ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋Ÿญ(truck_weight)
0 [0,0] [7,4,5,6]
1 [0] -> [0,7] [4,5,6]
2 [7] -> [7,0]  
3 [0] -> [0,4] [5,6]
4 [4] -> [4,5] [6]
5 [5] -> [5,0]  
6 [0] -> [0,6] []
7 [6]  
8 []  
๋ถ„์„ > ์ด ํ•ด์„ค ์ฝ”๋“œ์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋Š” ๋‹ค๋ฆฌ ์œ„์— ์ตœ๋Œ€๋กœ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํŠธ๋Ÿญ์˜ ๊ฐœ์ˆ˜๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘๊ณ , while ๋ฌธ์„ ๋Œ๋ฉด์„œ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ pop ํ•˜๋Š” ๋™์‹œ์— ๋Œ€๊ธฐ ์ค‘์ธ ์ฒซ ๋ฒˆ์งธ ํŠธ๋Ÿญ์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ weight๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•œ ๋‹ค์Œ, ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ๋กœ ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋Ÿญ์„ ๋‹ค๋ฆฌ ์œ„๋กœ ๋ณด๋‚ด๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ append ํ•˜์—ฌ ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋Ÿญ์ด ๋‹ค์Œ ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•˜๋Š” ์›๋ฆฌ์ด๋‹ค. ๊ฒฐ๊ตญ while ๋ฌธ ์ž์ฒด๋Š” ๋‹ค๋ฆฌ ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๋นˆ๋ฐฐ์—ด์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋ฉฐ, ๋‹ค๋ฆฌ ์œ„์— ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋Ÿญ์„ ๋ณด๋‚ผ ๋•Œ(๋‹ค๋ฆฌ ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ ๋ฐฐ์—ด์— ๋Œ€๊ธฐ ์ค‘์ธ ์ฒซ ๋ฒˆ์งธ ํŠธ๋Ÿญ์„ append ํ•  ๋•Œ)๋Š” ๋ฐ˜๋“œ์‹œ ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋Ÿญ์ด ํ•˜๋‚˜ ์ด์ƒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. ์ฒ˜์Œ ์ด ์ฝ”๋“œ๋ฅผ ๋ดค์„ ๋•Œ๋Š” ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ€์ง€ ์•Š์•„์„œ ์ง์ ‘ ์†์œผ๋กœ ๋ณ€ํ™” ๊ณผ์ •์„ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€ ๋ณด๋‹ˆ ์ฝ”๋“œ์˜ ์ „๊ฐœ ๊ณผ์ •์„ ํ™•์‹คํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

 

 

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

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

programmers.co.kr