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
- 재귀적사고
- staging_area
- 4A피드백
- 프로젝트
- Java
- 동전교환알고리즘
- 스프링
- 제너릭메서드
- 스레드동기화
- string메서드
- ChatGPT
- 네이티브애플리케이션
- SQL
- API명세서
- 루트사용자
- 프로그래머스
- API
- 날씨API
- openapi
- 성장형마인드셋
- 99클럽
- 배열탐색
- Spring
- 참조변수타입변환
- 향상된for문
- 파일사용권한
- SQ3R
- 자바
- 코딩테스트
- 백준
Archives
- Today
- Total
개발 공부용
그리디 | 백준 13305 주유소 본문
문제
https://www.acmicpc.net/problem/13305

그림과 같이 원 안쪽의 숫자는 주유소의 리터당 가격이고, 선 위의 숫자는 이동해야할 거리(km)이다.
1리터로 1km를 이동할 수 있다고 할 때, 제일 왼쪽 도시에서 오른쪽 도시까지 이동하는 최소비용을 구하여라
차에 기름이 없는 상태로 출발하여 첫번째 주유소에서는 다음 주유소까지 이동할 수 있는 양의 기름을 넣어야 한다.
입력
- 첫 번째 줄: 도시의 개수를 나타내는 정수 N
- 두 번째 줄: 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1개의 자연수
- 세 번째 줄: 주유소의 리터당 가격이 제일 왼쪽 도시부터 순서대로 N개의 자연수
4
2 3 1
5 2 4 1
출력
- 왼쪽 도시에서 오른쪽 도시까지의 최소 비용
풀이
import sys
input = sys.stdin.readline
N = int(input().strip())
roads = list(map(int, input().split()))
prices = list(map(int, input().split()))
cheapest = prices[0]
total = 0
for i in range(len(roads)):
if prices[i] < cheapest:
cheapest = prices[i]
total += cheapest*roads[i]
print(total)
그리디 문제
도시를 순차적으로 돌면서 거쳐 온 주유소 중 가장 저렴한 주유소의 리터당 가격을 cheapest에 저장한다.
cheapest * (이전 도시부터 현재 도시까지의 거리)를 total에 더한다.

1) 두 번째 도시에 도착했을 때 지나친 도시 중 가장 저렴한 주유소의 리터당 가격은 5
2) total += 5 * 2(이전 도시부터 현재 도시까지의 거리)
3) 세 번째 도시에 도착했을 때 지나친 도시 중 가장 저렴한 주유소의 리터당 가격은 2
4) total += 2 * 3
5) 세 번째 도시에 도착했을 때 지나친 도시 중 가장 저렴한 주유소의 리터당 가격은 2
5) total += 2 * 1
6) 답은 18
'코딩 테스트' 카테고리의 다른 글
| 1209. [S/W 문제해결 기본] 2일차 - Sum (0) | 2025.11.21 |
|---|---|
| 문자열 | 1213. [S/W 문제해결 기본] 3일차 - String (1) | 2025.11.21 |
| 재귀 | 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱 (0) | 2025.11.17 |
| 팰린드롬 | 1216. [S/W 문제해결 기본] 3일차 - 회문2 (0) | 2025.11.17 |
| 카운팅 정렬 | 1221. [S/W 문제해결 기본] 5일차 - GNS (0) | 2025.11.13 |