λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
✨ Algorithm

[λ°±μ€€/C++] 13305번 : μ£Όμœ μ†Œ

by nitronium102 2021. 9. 2.

문제

μ–΄λ–€ λ‚˜λΌμ— N개의 λ„μ‹œκ°€ μžˆλ‹€. 이 λ„μ‹œλ“€μ€ 일직선 λ„λ‘œ μœ„μ— μžˆλ‹€. νŽΈμ˜μƒ 일직선을 μˆ˜ν‰ λ°©ν–₯으둜 λ‘μž. 제일 μ™Όμͺ½μ˜ λ„μ‹œμ—μ„œ 제일 였λ₯Έμͺ½μ˜ λ„μ‹œλ‘œ μžλ™μ°¨λ₯Ό μ΄μš©ν•˜μ—¬ μ΄λ™ν•˜λ €κ³  ν•œλ‹€. μΈμ ‘ν•œ 두 λ„μ‹œ μ‚¬μ΄μ˜ λ„λ‘œλ“€μ€ μ„œλ‘œ 길이가 λ‹€λ₯Ό 수 μžˆλ‹€. λ„λ‘œ 길이의 λ‹¨μœ„λŠ” kmλ₯Ό μ‚¬μš©ν•œλ‹€.

처음 μΆœλ°œν•  λ•Œ μžλ™μ°¨μ—λŠ” 기름이 μ—†μ–΄μ„œ μ£Όμœ μ†Œμ—μ„œ 기름을 λ„£κ³  μΆœλ°œν•˜μ—¬μ•Ό ν•œλ‹€. κΈ°λ¦„ν†΅μ˜ ν¬κΈ°λŠ” λ¬΄μ œν•œμ΄μ–΄μ„œ μ–Όλ§ˆλ“ μ§€ λ§Žμ€ 기름을 넣을 수 μžˆλ‹€. λ„λ‘œλ₯Ό μ΄μš©ν•˜μ—¬ 이동할 λ•Œ 1kmλ§ˆλ‹€ 1λ¦¬ν„°μ˜ 기름을 μ‚¬μš©ν•œλ‹€. 각 λ„μ‹œμ—λŠ” 단 ν•˜λ‚˜μ˜ μ£Όμœ μ†Œκ°€ 있으며, λ„μ‹œ λ§ˆλ‹€ μ£Όμœ μ†Œμ˜ 리터당 가격은 λ‹€λ₯Ό 수 μžˆλ‹€. κ°€κ²©μ˜ λ‹¨μœ„λŠ” 원을 μ‚¬μš©ν•œλ‹€.

예λ₯Ό λ“€μ–΄, 이 λ‚˜λΌμ— λ‹€μŒ 그림처럼 4개의 λ„μ‹œκ°€ μžˆλ‹€κ³  ν•˜μž. 원 μ•ˆμ— μžˆλŠ” μˆ«μžλŠ” κ·Έ λ„μ‹œμ— μžˆλŠ” μ£Όμœ μ†Œμ˜ 리터당 가격이닀. λ„λ‘œ μœ„μ— μžˆλŠ” μˆ«μžλŠ” λ„λ‘œμ˜ 길이λ₯Ό ν‘œμ‹œν•œ 것이닀. 

제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 6λ¦¬ν„°μ˜ 기름을 λ„£κ³ , 더 μ΄μƒμ˜ 주유 없이 제일 였λ₯Έμͺ½ λ„μ‹œκΉŒμ§€ μ΄λ™ν•˜λ©΄ 총 λΉ„μš©μ€ 30원이닀. λ§Œμ•½ 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 2λ¦¬ν„°μ˜ 기름을 λ„£κ³ (2×5 = 10원) λ‹€μŒ 번 λ„μ‹œκΉŒμ§€ μ΄λ™ν•œ ν›„ 3λ¦¬ν„°μ˜ 기름을 λ„£κ³ (3×2 = 6원) λ‹€μŒ λ„μ‹œμ—μ„œ 1λ¦¬ν„°μ˜ 기름을 λ„£μ–΄(1×4 = 4원) 제일 였λ₯Έμͺ½ λ„μ‹œλ‘œ μ΄λ™ν•˜λ©΄, 총 λΉ„μš©μ€ 20원이닀. 또 λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 2λ¦¬ν„°μ˜ 기름을 λ„£κ³ (2×5 = 10원) λ‹€μŒ 번 λ„μ‹œκΉŒμ§€ μ΄λ™ν•œ ν›„ 4λ¦¬ν„°μ˜ 기름을 λ„£κ³ (4×2 = 8원) 제일 였λ₯Έμͺ½ λ„μ‹œκΉŒμ§€ μ΄λ™ν•˜λ©΄, 총 λΉ„μš©μ€ 18원이닀.

각 λ„μ‹œμ— μžˆλŠ” μ£Όμœ μ†Œμ˜ 기름 가격과, 각 λ„μ‹œλ₯Ό μ—°κ²°ν•˜λŠ” λ„λ‘œμ˜ 길이λ₯Ό μž…λ ₯으둜 λ°›μ•„ 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 제일 였λ₯Έμͺ½ λ„μ‹œλ‘œ μ΄λ™ν•˜λŠ” μ΅œμ†Œμ˜ λΉ„μš©μ„ κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

ν‘œμ€€ μž…λ ₯으둜 λ‹€μŒ 정보가 주어진닀. 첫 번째 μ€„μ—λŠ” λ„μ‹œμ˜ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ N(2 ≤ N ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” μΈμ ‘ν•œ 두 λ„μ‹œλ₯Ό μ—°κ²°ν•˜λŠ” λ„λ‘œμ˜ 길이가 제일 μ™Όμͺ½ λ„λ‘œλΆ€ν„° N-1개의 μžμ—°μˆ˜λ‘œ 주어진닀. λ‹€μŒ μ€„μ—λŠ” μ£Όμœ μ†Œμ˜ 리터당 가격이 제일 μ™Όμͺ½ λ„μ‹œλΆ€ν„° μˆœμ„œλŒ€λ‘œ N개의 μžμ—°μˆ˜λ‘œ 주어진닀. 제일 μ™Όμͺ½ λ„μ‹œλΆ€ν„° 제일 였λ₯Έμͺ½ λ„μ‹œκΉŒμ§€μ˜ κ±°λ¦¬λŠ” 1이상 1,000,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€. 리터당 가격은 1 이상 1,000,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€. 

좜λ ₯

ν‘œμ€€ 좜λ ₯으둜 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 제일 였λ₯Έμͺ½ λ„μ‹œλ‘œ κ°€λŠ” μ΅œμ†Œ λΉ„μš©μ„ 좜λ ₯ν•œλ‹€. 

μ„œλΈŒνƒœμŠ€ν¬

번호 배점 μ œν•œ

1 17 λͺ¨λ“  μ£Όμœ μ†Œμ˜ 리터당 가격은 1원이닀.
2 41 2 ≤ N ≤ 1,000, 제일 μ™Όμͺ½ λ„μ‹œλΆ€ν„° 제일 였λ₯Έμͺ½ λ„μ‹œκΉŒμ§€μ˜ κ±°λ¦¬λŠ” μ΅œλŒ€ 10,000, 리터 λ‹Ή 가격은 μ΅œλŒ€ 10,000이닀.
3 42 μ›λž˜μ˜ μ œμ•½μ‘°κ±΄ 이외에 아무 μ œμ•½μ‘°κ±΄μ΄ μ—†λ‹€.

풀이

μžλ£Œν˜•μ˜ 크기에 μœ μ˜ν•˜μž -> long long μ‚¬μš©!

01. 첫 번쨰 μ£Όμœ μ†Œμ—μ„œλŠ” λ‹€μŒ λ„μ‹œλ‘œ 갈 μ •λ„μ˜ 휘발유λ₯Ό μ£Όμœ ν•΄μ•Ό ν•œλ‹€.

02. 이후 μ£Όμœ μ†Œμ—μ„œλŠ” 이전 μ£Όμœ μ†Œμ™€ ν˜„μž¬ μ£Όμœ μ†Œμ˜ 가격을 비ꡐ해 더 μ‹Ό μ£Όμœ μ†Œμ—μ„œ μ£Όμœ ν•œλ‹€.

// 13305번 μ£Όμœ μ†Œ
#include <iostream>
#include <vector>
using namespace std;

long long solution(int city, vector<int> distance, vector<int> price){
  long long totalPrice = 0;
  long long minCost = price[0]; // μ΅œμ†Œ λΉ„μš©

  for (int i=0; i<city-1; i++){
    if (minCost > price[i]){
      minCost = price[i];
    }
    totalPrice += minCost*distance[i];
  }
  return totalPrice;

}

int main(){
  int city, d, p;
  vector<int> distance;
  vector<int> price;
  cin >> city;
  for (int i=0; i<city-1; i++){
    cin >> d;
    distance.push_back(d);
  }

  for (int i=0; i<city; i++){
    cin >> p;
    price.push_back(p);
  }

  cout << solution(city, distance, price);
}

λŒ“κΈ€