티스토리 뷰
문제출처 - https://programmers.co.kr/learn/courses/30/lessons/42583
코딩테스트 연습 - 다리를 지나는 트럭 | 프로그래머스
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서
programmers.co.kr
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 1
dq = deque() # [트럭무게, 다리를 지난 시간]
dq.append([truck_weights[0], bridge_length])
truck_weights.pop(0)
while len(dq) != 0 and dq[0][1] != 0:
temp = 0 # 다리를 다 건넌 트럭
total_weight = 0 # 현재 다리에 있는 트럭들의 총 무게
# dq에 있는 트럭들의 시간 -1
for i in range(len(dq)):
total_weight += dq[i][0]
dq[i][1] -= 1
if dq[i][1] == 0:
temp += 1
# 다리를 다 건넌 트럭만큼 지우기
for i in range(temp):
total_weight -= dq[i][0]
dq.popleft()
# (현재 다리에 있는 트럭들 무게 + 대기트럭)이 다리 무게보다 작으면 다리에 추가!
if len(truck_weights) != 0 and total_weight + truck_weights[0] <= weight:
dq.append([truck_weights[0], bridge_length])
truck_weights.pop(0)
answer += 1
# print(answer, dq, truck_weights)
return answer
설명
우선 이 문제는 deque를 이용해서 풀었다. 왜냐하면 리스트의 원소를 앞뒤로 빼야하는 경우가 있기 때문이다.
deque에는 [트럭무게, 다리를 지난 시간]이 저장되어 있다. 시간이 경과할수록 다리를 지난 시간은 -1씩 줄어든다.
1. 가장 먼저, dq에 대기중인 트럭1을 넣어줬다. 그리고 대기중인 트럭 리스트에서 빼줬다. while문에 들어가기 전에 트럭을 넣었기 때문에 answer에 1을 더해줬다.
2. while문은 dq가 비어있지 않고 dq에 있는 트럭의 시간이 0이 될때까지 돈다.
while문 안
1. 다리위에 있는 모든 트럭의 남은 시간을 1씩 감소시킨다. 이때, 감소시킨 값이 1이면 temp의 값을 1씩 증가시킨다. (temp는 현재 시간에 다리 건너기를 완료한 트럭의 개수임)
2. temp만큼 for문을 돌리면서 완료된 트럭들을 total_weight에서 빼주고 dq에서도 빼준다.
3. (현재 다리에 있는 트럭들 무게 + 대기트럭)이 다리 무게보다 작으면 dp에 추가하고 대기 리스트에선 빼준다.
'ALGORITHM > 프로그래머스' 카테고리의 다른 글
[Python]프로그래머스 - 프린터(level2) (0) | 2020.02.26 |
---|---|
[Python]프로그래머스 - 기능개발(level2) (0) | 2020.02.26 |
[Python]프로그래머스 - 탑(level2) (0) | 2020.02.25 |
[Python]프로그래머스 - 올바른 괄호(level2) (0) | 2020.02.25 |
[Python]프로그래머스 - 이상한 문자 만들기(level1) (0) | 2020.02.25 |
- Total
- Today
- Yesterday
- 구현
- 완전탐색
- C++
- 괄호
- left join
- 파이썬
- 정렬
- 순열
- Permutation
- BOJ
- 코딩테스트
- 스택
- 프로그래머스
- hash
- 2019 Kakao Blind Recruitment
- programmers
- 우선순위큐
- 2020 KAKAO BLIND RECRUITMENT
- 해시
- SW Expert
- 딕셔너리
- 문자열
- SWExpert
- combination
- Python
- 백준
- 힙
- dictionary
- 재귀
- 문자열처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |