반응형
https://www.acmicpc.net/problem/13305
13305번: 주유소
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1
www.acmicpc.net
- 문제
위와 같이 도로의 길이가 간선 위에, 주유소 기름 가격이 원 내부에 주어지고 좌에서 우로 이동할때 끝에서 끝까지 가장 저렴하게 갈 수 있는 경우를 구하는 문제다.
- 해설
쉽게 풀 수 있는 문제다.
도로의 길이가
2 3 1
그리고 기름값이
5 2 4 1
이라고 되어 있으면,
1. 첫번째 도시에 들렀을 때,
지금까지 온 거리가 0이고 가장 싼 기름값이 5이므로
0 += 0 * 5가 된다.
2. 두 번째 도시에 들렀을 때
지금까지 온 거리가 2이고 두 번째 도시의 기름값이 5보다 싸므로
0+= 2 * 5를 해서
10이 되고, 기름값 2를 저장하자.
3. 세 번째 도시에 들렀을 때는 기름값이 더 비싸지므로 무시하고
4. 마지막 도시에 들렀을 때는 기름값이 얼마든 상관없으니, 이때까지 온 거리
3과 1을 여기까지 오면서 가장 쌋던 2의 기름값으로 구매를 하면
총 18원이 된다.
- 풀이
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, temp, least = 1000000001;
vector<int> road;
vector<int> gasStation;
long long answer = 0, went = 0;
cin >> N;
for (int i = 0; i < N - 1; i++)
{
cin >> temp;
road.push_back(temp);
}
for (int i = 0; i < N; i++)
{
cin >> temp;
gasStation.push_back(temp);
}
// 여기까지는 입력
for (int i = 0; i < N - 1; i++) // 마지막 도착지까지가 아닌 마지막 도로까지만 반복
{
if (least > gasStation[i]) // 현재까지 가장 싼 기름값보다 더 싼곳을 찾으면
{
answer += went * least; // 지금까지 온 거리만큼의 기름만 사고,
went = 0;
least = gasStation[i]; // 싼 기름 가격 저장
}
went += road[i]; // 더 싼 기름 찾을때까지 계속 도로 길이만큼 저장
}
answer += went * least; // 마지막 도착지까지의 거리는 위의 반복문에서 계산 못하니 추가로 계산
cout << answer;
return 0;
}
- 새롭게 알게 된 점
반응형
'Algorithm > Baekjoon BOJ' 카테고리의 다른 글
[백준][C++] 5430: AC (0) | 2022.11.21 |
---|---|
[백준][C++] 1931: 회의실 배정 (0) | 2022.11.15 |
[백준][C++] 10986: 나머지 합 (0) | 2022.11.14 |
[백준][C++] 25682: 체스판 다시 칠하기 2 (0) | 2022.11.12 |
[백준][C++] 11660: 구간 합 구하기 5 (0) | 2022.11.12 |