티스토리 뷰
반응형
📎 간략한 문제 정리
-
각 지역은 주유소를 가지고 있고, 주유소마다 기름의 가격은 다릅니다. 위의 그림에서는 각 지역마다 기름 가격이 5, 2, 4, 1원이고 지역간 이동시 필요간 기름의 양이 2, 3, 1 리터입니다. 왼쪽 시작점에서 오른쪽 도착점까지 이동하는데 필요한 기름의 최소 비용을 구하는 문제입니다.
📈 문제 분석
- 기름통의 크기가 한정되어있다면 조금 어려운 문제일 수 있겠지만 각 지역에서 기름을 무제한으로 구매 가능하므로 구매 조건만 생각하면 될 문제입니다.
🙋♂️ 내가 처음 생각한 해결 방법
- 시작점에서 다음 지역의 기름값을 보고 만약 현재 위치 가격이 더 높다면 다음 지역 이동까지 필요한 만큼의 기름만 구매하고 넘어갑니다. 하지만 지금 지역의 기름가격이 더 낮다면 다다음 지역까지 거리만큼 기름을 구매하고 종료지점 도착까지 반복하여 다시 비교합니다. 카테고리는 그리디 알고리즘이지만 실제로는 시뮬레이션에 가까웠습니다.
💻 풀이한 코드
from sys import stdin
input = stdin.readline
N = int(input())
gas_to_move = list(map(int, input().split()))
gas_price = list(map(int, input().split()))
cost = 0
current_price = gas_price[0]
temp_distance = gas_to_move[0]
for i in range(1, N):
if i == N-1:
cost += current_price * temp_distance
break
if current_price > gas_price[i]:
cost += current_price * temp_distance
current_price = gas_price[i]
temp_distance = gas_to_move[i]
else:
temp_distance += gas_to_move[i]
print(cost)
📝 해결 과정에서 만난 문제, 고민들
- 로직 자체는 매우 간단했지만 엣지 포인트를 어떻게 처리할지가 중요했습니다.
- 🧐 만약 이 문제를 각 지역마다 살 수 있는 기름의 상한선이 있다면? : 상한선이 있다면 복잡해질 것 같지만 실제로는 조건 하나가 추가될 뿐입니다. 위의 else 구문에서 상한을 넘는지 확인하면 될 것 같습니다. 다만, 상한선이 있다면 일부만 살 수 있는 경우가 발생할 수 있습니다. 예를 들어 10리터의 한도가 있는 상황에서 현재 8리터를 구매한 상황이고, 다음 이동을 위해서는 4리터가 필요할 때 2리터는 현재 위치에서 추가로 구매하고 나머지 2리터를 다음 지역에서 무조건 사는 로직이 필요합니다. 이러한 문제 역시 시뮬레이션에 가까운 개념입니다.
반응형
'알고리즘 학습 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] - 행렬 곱셈 (2740번) with Python (0) | 2021.04.14 |
---|---|
[백준 알고리즘] - AC (5430번) with Python (0) | 2021.04.13 |
[백준 알고리즘] - 전깃줄 (2565번) with Python (0) | 2021.04.09 |
[백준 알고리즘] - 신나는 함수 실행 (9184번) with Python (0) | 2021.04.06 |
[백준 알고리즘] - 좌표 압축 (18870번) with Python (0) | 2021.04.05 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- NumberofDiscIntersections#Codility#Sort#Python
- 쿼드트리#BOJ#분할정복#Python
- 랜선자르기#이분탐색#BOJ#Python
- Triangle#Sorting#Codility#Python
- API#lazy#
- 종이자르기#분할정복#BOJ#Python
- N으로 표현#DP#Programmers#Python
- 토마토#백준알고리즘#Python
- 미로 탐색#백준알고리즘#Python
- 공유기 설치#BOJ#이분탐색#Python
- 날짜 계산#BOJ#완전탐색#Python
- django#slicing
- 백준 알고리즘#BackTracking
- Brackets#Stacks and Queues#Codility#Python
- 반복수열#백준알고리즘#Python
- 텀 프로젝트#백준알고리즘#Python
- 암호코드#dp#BOJ#Python
- Distinct#Codility#Python
- 리모컨#완전탐색#BOJ#Python
- 병든 나이트#BOJ#탐욕법#Python
- 나무자르기#BOJ#이분탐색#Python
- 섬의개수#백준알고리즘#Python
- PassingCars#Codility#Python
- 순열사이클#BOJ#Python
- 파이썬알고리즘인터뷰#4장
- filter#isalnum#lower
- django
- 배열합치기#분할정복#BOJ#Python
- Swift#Tuples#Range
- 터틀비치#리콘#xbox#controller
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함