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 |
31 |
Tags
- Python
- 현대자동차
- 소프티어
- GAN
- heapq
- alogorithm
- 프로그래머스
- Java
- JavaScript
- softeer
- cim
- 현대
- 딥러닝
- 토이프로젝트
- 티스토리챌린지
- 탐욕법
- 오블완
- 파이썬
- 백준
- programmers
- 힙큐
- Baekjoon
- cs공부
- 스마트팩토리
- 자바
- boj
- Algorithm
- 알고리즘
- re_lunchu
- 자바스크립트
Archives
- Today
- Total
eaz_coding
[Programmers] 다리를 지나는 트럭 본문
문제
요약
길이가 length인 다리가 최대 weight 무게를 견딜 수 있을 때,
truck_weights의 트럭들이 모두 다리를 건너려면 얼마나 걸리는가
풀이
풀이1(오답)
첫번째 풀이의 접근 자체는 나쁘지 않았던 것 같다.
현재 다리 위의 트럭들의 무게와 새로 들어오는 트럭의 합이 기준보다 초과일때,
제일 앞에 있는 트럭이 다리를 다 지날 때까지는 진입을 못한다.
마지막 트럭이 다리 위에 올라오고 나서는 다리 길이만큼 시간이 더 걸리기 때문에 마지막에 다리길이를 한번더 더해준다.
이 풀이는 다리 중간 쯤까지 차가 이동해 있었을 경우를 파악하지 못한다.
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
head = 0
q = deque([])
for truck in truck_weights:
if sum(q) + truck > weight:
answer += bridge_length
q.popleft()
else:
answer += 1
q.append(truck)
while len(q) > bridge_length:
q.popleft()
answer += 1
return answer+bridge_length
풀이2(정답)
무게를 초과할 때 무게 대신 0을 추가하는 것까지는 파악했는데 그 뒤로 계속 풀리지 않았다.
그리고 나서는 total로 무게를 그때그때 구하는 것 대신 sum(bridge)를 사용했다가 시간초과가 발생했다.
deque여부와 상관 없이 sum은 리스트 길이 n만큼 O(n)의 시간이 걸리기 때문에 시간 초과가 된다.
오늘도 하나 알아가는 하루 :)
from collections import deque
def solution(length, weight, truck_weights):
answer = 0
trucks = deque(truck_weights)
bridge = deque([0] * length)
total = 0
while len(trucks):
t = bridge.popleft()
answer += 1
total -= t
if total + trucks[0] > weight:
bridge.append(0)
else:
t = trucks.popleft()
bridge.append(t)
total += t
return answer+length
'eaz_algorithm' 카테고리의 다른 글
[Softeer] 로봇이 지나간 경로 (0) | 2024.03.21 |
---|---|
[Softeer] 함께하는 효도 (2) | 2024.03.20 |
[Softeer] 동계 테스트 시점 예측 (2) | 2024.03.18 |
[Softeer] 스마트 물류 (0) | 2024.03.15 |
[Softeer] 자동차 테스트 (0) | 2024.03.13 |