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
- 다익스트라
- 브루트포스
- join
- BFS
- 그래프 탐색
- GROUP BY
- 투포인터
- 크루스칼
- 분할정복
- 플로이드-워셜
- 누적합
- MST
- 에라토스테네스의 체
- 구현
- 다시
- 그리디
- 다이나믹 프로그래밍
- 해시
- DP
- 다이나믹프로그래밍
- 서브쿼리
- 자료구조
- 백트래킹
- 시뮬레이션
- 수학
- 우선순위큐
- DFS
- 트리
- 그래프 이론
- 재귀
Archives
- Today
- Total
기록하고 까먹지 말기
다리를 지나는 트럭 본문
날짜 : 2023. 05. 29
사용 언어 : python
문제
코드
from collections import deque
def solution(bridge_length, weight, truck_weights): # 최대 대수, 최대 하중, 트럭 무게
q = deque()
res = 0
for i in range(bridge_length): q.append(0)
i, s = 0, 0 # 순서, 다리에 올라간 무게, 개수
while True:
if i not in range(len(truck_weights)): break
res += 1
out = q.popleft()
s -= out
if s + truck_weights[i] <= weight:
s += truck_weights[i]
q.append(truck_weights[i])
i += 1
else:
q.append(0)
while s > 0:
res += 1
out = q.popleft()
s -= out
q.append(0)
return res
풀이
- 다리의 각 위치에 해당하는 무게를 전부 0으로 설정한 데크로 생성한 다음 조건에 맞추어 순회한다.
- 각 트럭의 무게를 기록하는 변수 s 값에 따라 값을 추가했을 경우 전체 무게 한도가 초과되지 않으면 추가, 아니라면 이동하는 케이스로 돌린다.(뒤에 0을 추가)
- 이후 모든 트럭들이 다리에 들어와 첫 번째 while문이 끝났다 해도 다리에 트럭이 남아있을 수 있기 때문에 이를 전부 빼주는 작업이 필요하다.
- 그렇기 때문에 또다시 while문을 사용해 뒤에 0을 push하는 방식으로 전개한다.
알게된 점
- 많은 실수를 했다.
- 큐를 생성하면서 q로 생성했고, 다리에 있는 트럭의 수를 세는 변수로 q를 선언하는 바람에 오버라이딩되어 popleft가 먹히지 않았다.
- 프로그래머스 환경에서는 어떤 라인에서 문제였는지를 잡아주지 않기 때문에 고민끝에 pycharm 환경에서 잡아낼 수 있었고, 문제를 해결할 수 있었다.
- 문제 자체는 간단했지만 지문이 너무 애매했고, 변수를 선언함에 있어서 너무 안일하게 실수를 범한 것 같다.
- 지난 백준에서 문제를 풀 때에도 비슷한 실수를 한 것 같은데 그냥 q라고 하기보다는 queue라고 선언해서 선언 시 중복이 되지 않도록 하는 습관을 들여야겠다.
참고 사이트
-
'전공 > 프로그래머스' 카테고리의 다른 글
아이템 줍기 (0) | 2023.05.30 |
---|---|
가장 먼 노드 (0) | 2023.05.29 |
(SQL) 5월 식품들의 총매출 조회하기 (0) | 2023.05.29 |
(SQL) 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2023.05.29 |
(SQL) 대여 기록이 존재하는 자동차 리스트 구하기 (0) | 2023.05.28 |