코딩 테스트/프로그래머스

Lv2. 다리를 지나는 트럭

  • -
728x90
반응형

문제 보기 :  코딩테스트 연습 - 다리를 지나는 트럭 | 프로그래머스 스쿨

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제

  • 정답률 : 54%


작성 코드

from collections import deque

def solution(bridge_length, weight, truck_weights):
    truck = deque(truck_weights)  # 대기 중인 트럭 리스트를 deque로 변환

    # 초기 다리 상태 설정: 길이만큼 0으로 채운 deque 생성
    bridge = [0] * (bridge_length - 1)
    bridge = deque(bridge)

    # 첫 번째 트럭을 다리에 올리고, 다리의 총 무게를 갱신
    bridge.append(truck.popleft())
    weight_bridge = sum(bridge)
    
    # 경과 시간 초기화
    answer = 1  

    # 대기 트럭이 있을 때 반복
    while truck:
        t = truck.popleft()  # 대기 트럭 중 맨 앞 트럭을 가져옴
        while True:
            # 다리의 첫 번째 칸에서 트럭을 내보냄
            weight_bridge -= bridge.popleft()  # 다리의 총 무게에서 해당 트럭 무게를 뺌

            # 현재 트럭을 올렸을 때 다리 무게를 초과하면 빈 공간 추가
            if weight_bridge + t > weight:
                bridge.append(0)  # 빈 공간 추가
                answer += 1  # 시간 증가
            else:
                # 현재 트럭을 다리에 올림
                bridge.append(t)
                weight_bridge += t  # 다리의 총 무게 갱신
                answer += 1  # 시간 증가
                break  # 다리에 트럭을 올렸으므로 루프 종료

    # 마지막 트럭이 다리를 건너는 데 걸리는 시간 추가
    answer += len(bridge)

    return answer

풀이

트럭들이 다리를 건너는 데 걸리는 시간을 계산하는 문제다.

입력받은 트럭 무게 리스트를 deque로 변환해 사용했고, 다리는 bridge_length만큼의 길이를 가진다.
초깃값은 모두 빈 공간(0)으로 채워진 상태로 두고,
대기 트럭 중 첫 번째 트럭을 다리에 올리고, 다리 위에 있는 트럭들의 총 무게를 나타내는 weight_bridge 값을 첫번째 트럭의 무게로 두었다. 또한, 트럭이 다리에 오르면서 시간이 1초 흐르도록 처리했다.

대기 트럭에서 하나씩 꺼내어 다리에 올릴 수 있는지 확인하는데,
트럭이 다리에 올라갈 수 있는 경우다리의 첫 번째 칸에서 트럭을 내리고, 무게를 갱신한다. 새 트럭을 다리에 추가하고, 다리 위의 총 무게도 갱신 + 시간 1초 증가시킨 뒤 다음 트럭으로 넘어간다.

다리에 올라갈 수 없는 경우 빈 공간(0)을 추가하며 시간을 1초씩 증가시킨다.

마지막으로는 모든 트럭이 다리에 올라가고, 남은 트럭들이 다리를 완전히 건너는 데 걸리는 시간을 다리의 길이만큼 추가한다.

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv2. 게임 맵 최단거리  (1) 2024.10.10
Lv3. 베스트앨범  (0) 2024.10.07
Lv0. 평행  (1) 2024.10.06
Lv3. 기지국 설치  (0) 2024.10.04
Lv2. 피로도  (0) 2024.10.04
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.