Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 커리어
- John Sonmez
- 매직 넘버
- permutations
- 탈출 조건
- 중간 변수
- 가이드
- ZIP
- 스택/큐
- boolean
- 그리디
- 부등호
- 2020 채용
- 중첩
- enumerate
- 프로그래머스
- 가독성
- deque
- 중첩문
- 함수화
- 임시 변수
- 변수명
- 함수
- 조합
- max-heap
- 힙
- 대소 비교
- 코딩테스트
- min heap
- 파이썬
Archives
- Today
- Total
Better Code, Better Life
다리를 지나는 트럭 - 프로그래머스 - 파이썬 풀이 본문
문제 풀이
트럭이 진입할 때 걸리는 시간, 나갈 때 걸리는 시간이 헷갈리는 문제입니다.
예시 1번을 보면
0 ~ 2초에 건널 것 같은 트럭이 0 ~ 1초에는 진입하고, 1 ~ 3초까지 건넙니다.
이 점을 이해하고 문제를 풀어봅시다.
- 1초 단위로 업데이트를 합니다. 다리에 있는 트럭들 위치를 1만큼 이동시킵니다.
- 위치가 0이 된 트럭은 제거해줍니다.
- 만약 1, 2번 단계 이후에 weight_capacity 여유가 있다면 추가 시켜줍니다.
- [truck_weight, bridge_length]로 추가시킵니다.
- 추후에 다리 끝에 도달 했을 때 제거된 트럭 무게를 구할 수 있게 됩니다.
deque 자료구조를 통해 첫 번째 원소를 추출해내는 작업을 수월하게 할 수 있습니다.
프린터 문제 해설 에서 deque 설명을 참조하세요!
클린 코드 작성법
- Logic이 시작하기 전에 왜 이 코드뭉치를 작성했는지 주석으로 작성해줍니다.
- 주석은 코드가 어떻게 돌아갔는지보다 왜 이 로직을 작성하는지 설명해주어야 합니다.
- 주석은 정확해야 합니다. 주석과 코드의 내용이 다르다면 읽는 이는 큰 혼돈에 빠집니다...
- 주석을 쓸 시간이 없다면 대충 쓰는 것보다 안 쓰는 것이 좋습니다.
- while문 내에 for문, if문 중첩을 함수화로 해결합니다.
- update 함수는 복잡하기 때문에 직접 while문 내에 넣기보다 함수로 작성해줍시다.
- 문제에 제시된 weight 변수는 weight_capacity가 더 적절한 변수명입니다.
- 적절한 변수명을 지어 문제를 더 잘 이해해 봅시다.
해답 코드
from collections import deque
def update(weight_capacity, trucks_in_bridge):
# Move all truck's location by 1
for index, truck_info in enumerate(trucks_in_bridge):
weight, location = truck_info
trucks_in_bridge[index][1] = location - 1
# Remove a truck if it passes the bridge.
if trucks_in_bridge:
first_truck_weight, first_truck_location = trucks_in_bridge[0]
if first_truck_location == 0:
weight_capacity += first_truck_weight
trucks_in_bridge.popleft()
return weight_capacity, trucks_in_bridge
def solution(bridge_length, weight, truck_weights):
weight_capacity = weight
truck_weights = deque(truck_weights)
trucks_in_bridge = deque([])
time_taken = 0
# Send a truck in the queue if possible or wait for a second.
while truck_weights:
time_taken += 1
weight_capacity, trucks_in_bridge = update(weight_capacity, trucks_in_bridge)
if 0 <= weight_capacity - truck_weights[0]:
truck_weight = truck_weights.popleft()
trucks_in_bridge.append([truck_weight, bridge_length])
weight_capacity -= truck_weight
# Wait until last truck pass the bridge.
if trucks_in_bridge:
last_truck = trucks_in_bridge[-1]
last_truck_location = last_truck[1]
time_taken += last_truck_location
return time_taken
도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!
코딩테스트 연습 - 다리를 지나는 트럭 | 프로그래머스
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서
programmers.co.kr
'Coding Test > Programmers' 카테고리의 다른 글
주식가격 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.03 |
---|---|
기능개발 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.01 |
쇠막대기 - 프로그래머스 - 파이썬 풀이 (0) | 2019.07.28 |
탑 - 프로그래머스 - 파이썬 풀이 (0) | 2019.07.26 |
프린터 - 프로그래머스 - 파이썬 풀이 (0) | 2019.07.24 |
Comments