이 포스팅은 프로그래머스 시리즈 28 편 중 1 번째 글 입니다.

  • Part 1 - This Post
  • Part 2 - 02: 멀정한 사각형
  • Part 3 - 03: 더 맵게
  • Part 4 - 04: 메뉴 리뉴얼
  • Part 5 - 05: 전화번호 목록
  • Part 6 - 06: 가장 큰 수
  • Part 7 - 07: 예상 대진표
  • Part 8 - 08: 다단계 칫솔 판매
  • Part 9 - 09: 불량 사용자
  • Part 10 - 10: 베스트 앨범
  • Part 11 - 11: 합승 택시 요금
  • Part 12 - 12: 스타 수열
  • Part 13 - 13: 위장
  • Part 14 - 14: 주식 가격
  • Part 15 - 15: 디스크 컨트롤러
  • Part 16 - 16: N으로 표현
  • Part 17 - 17: 전화번호 목록
  • Part 18 - 18: 단어 변환
  • Part 19 - 19: 여행 경로
  • Part 20 - 20: 프린터
  • Part 21 - 21: 후보키
  • Part 22 - 22: 삼각 달팽이
  • Part 23 - 23: 실패율
  • Part 24 - 24: 입국심사
  • Part 25 - 26: 기둥과 보 설치
  • Part 26 - 27: 광고 삽입
  • Part 27 - 28: 퍼즐 조각 채우기
  • Part 28 - 29: 상호 평가
▼ 목록 보기

목차

▼ 내리기

풀이

시뮬레이션 문제이다. 시뮬레이션 문제는 순서를 명확하게 이해하고 이를 지켜주는 것이 매우 중요하다. 항상 집중해서 이부분은 확인할 것

Code

from collections import deque

def solution(bridge_length, weight, truck_weights):
    answer = 0
    t = 0
    bridge_in = 0
    truck = deque(truck_weights)
    bridge = deque()
    
    while truck or bridge: # 트럭이 남아 있으면
        t += 1
        # 다리에서 내리기
        if bridge: # 다리에 타있으면 먼저 내려
            a = bridge.popleft()
            bridge_in -= a[0]
            if t - a[1] < bridge_length: #들어온 시간이 아직 덜됐으면 다시 태우기
                bridge.appendleft(a)
                bridge_in += a[0]
            
        
        
        
        # 태우기
        if truck:
            tr = truck.popleft()
            if bridge_in+tr <= weight: # 이미 타있는 것과 지금꺼 추가해서 탈 수 있으면
                bridge.append((tr, t)) # 다리 탑승
                bridge_in += tr
            else: # 탈수 없으면
                truck.appendleft(tr) # 원상 복귀
        
        
    
    answer = t
    return answer

Reference