Algorithm/📖Baekjoon
#13305 주유소
yewoneeee
2022. 4. 22. 21:21
# 문제
# 입력 및 출력
# 풀이
처음에 문제를 보고 좀 당황했다ㅋㅋ
어떻게 그리디로 풀지 모르겠더라
근데 어떻게 쓰다보니까 이게 되네 싶어서 간단하게 풀었다
리터당 가격을 하나씩 비교하면서 최소값을 찾아서 distance값을 곱해주면 된다
처음 코드가 아래와 같았는데 문제가 좀 있었다
#include <iostream>
using namespace std;
int dis[100000];
int price[100000];
int main() {
int n;
cin >> n;
n--;
for (int i = 0; i < n; i++) {
cin >> dis[i];
}
for (int i = 0; i < n; i++) { // 문제 1) 하나 덜 입력됨
cin >> price[i];
}
int minv = 1000000000, result = 0;
for (int i = 0; i < n; i++) {
minv = min(minv, price[i]);
result += minv * dis[i]; // 문제 2) 곱셈 값이 int 범위 초과
}
cout << result;
}
위의 두 문제 때문에 서브태스크 3번에서 틀렸다고 나오더라
서브태스크 1, 2번은 맞다고 나오는거 보면 문제 1은 저렇게 써도 잘 작동됐던건지는 모르겠다ㅋㅋㅋ
리터당 가격이랑 distance값이 1,000,000,000이하길래 int 범위 내라고 생각했는데
곱셈으로 가면 int 범위를 훨씬 넘겠구나 생각해서 long long으로 바꿔줬다
min() 함수 매개변수 타입 일치 문제 때문에 dis, price 배열도 다 long long 으로 선언해줬음
#include <iostream>
using namespace std;
#define INF 987654321;
long long dis[100000];
long long price[100000];
int main() {
int n;
cin >> n;
for (int i = 0; i < n - 1; i++) {
cin >> dis[i];
}
for (int i = 0; i < n; i++) {
cin >> price[i];
}
long long minv = INF; // 혹시 몰라서 값을 크게 설정해줌
long long result = 0;
for (int i = 0; i < n - 1; i++) {
minv = min(minv, price[i]);
result += minv * dis[i];
}
cout << result;
}