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

[λ°±μ€€/C++] 10162번 : μ „μžλ ˆμΈμ§€

by nitronium102 2021. 8. 15.

항상 λ§žμ•˜μŠ΅λ‹ˆλ‹€!!만 μžˆλŠ” 쀄 μ•Œμ•˜λŠ”λ°...100점이 μžˆλŠ” κ±Έ 였늘 처음 μ•Œμ•˜λ‹€ μ„œλΈŒνƒœμŠ€ν¬ λ¬Έμ œλŠ” μ΄λ ‡κ²Œ λ‚˜μ˜€λ‚˜λ³΄λ‹€

문제

3개의 μ‹œκ°„μ‘°μ ˆμš© λ²„νŠΌ A B Cκ°€ 달린 μ „μžλ ˆμΈμ§€κ°€ μžˆλ‹€. 각 λ²„νŠΌλ§ˆλ‹€ μΌμ •ν•œ μ‹œκ°„μ΄ μ§€μ •λ˜μ–΄ μžˆμ–΄ ν•΄λ‹Ή λ²„νŠΌμ„ ν•œλ²ˆ λˆ„λ₯Ό λ•Œλ§ˆλ‹€ κ·Έ μ‹œκ°„μ΄ λ™μž‘μ‹œκ°„μ— 더해진닀. λ²„νŠΌ A, B, C에 μ§€μ •λœ μ‹œκ°„μ€ 각각 5λΆ„, 1λΆ„, 10μ΄ˆμ΄λ‹€.

λƒ‰λ™μŒμ‹λ§ˆλ‹€ μ „μžλ ˆμΈμ§€λ‘œ μš”λ¦¬ν•΄μ•Όν•  μ‹œκ°„ Tκ°€ μ΄ˆλ‹¨μœ„λ‘œ ν‘œμ‹œλ˜μ–΄ μžˆλ‹€. μš°λ¦¬λŠ” A, B, C 3개의 λ²„νŠΌμ„ 적절히 λˆŒλŸ¬μ„œ κ·Έ μ‹œκ°„μ˜ 합이 μ •ν™•νžˆ Tμ΄ˆκ°€ λ˜λ„λ‘ ν•΄μ•Ό ν•œλ‹€. 단 λ²„νŠΌ A, B, Cλ₯Ό λˆ„λ₯Έ 횟수의 합은 항상 μ΅œμ†Œκ°€ λ˜μ–΄μ•Ό ν•œλ‹€. 이것을 μ΅œμ†Œλ²„νŠΌ μ‘°μž‘μ΄λΌκ³  ν•œλ‹€. 

만일 μš”λ¦¬μ‹œκ°„μ΄ 100초라고 ν•˜λ©΄(T=100) Bλ₯Ό 1번, CλŠ” 4번 λˆ„λ₯΄λ©΄ λœλ‹€. 이와 λ‹€λ₯΄κ²Œ Cλ₯Ό 10번 λˆŒλŸ¬λ„ 100μ΄ˆκ°€ λ˜μ§€λ§Œ 이 경우 10λ²ˆμ€ μ΅œμ†Œ νšŸμˆ˜κ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ΄ 닡이 될 수 μ—†λ‹€. 이 경우 B 1번, C 4번, 총 5번이 μ΅œμ†Œλ²„νŠΌ μ‘°μž‘μ΄λ‹€. 그리고 T=234와 같이 3개의 λ²„νŠΌμœΌλ‘œ μ‹œκ°„μ„ μ •ν™•νžˆ 맞좜 수 μ—†λŠ” κ²½μš°λ„ μžˆλ‹€. 

μ—¬λŸ¬λΆ„μ€ 주어진 μš”λ¦¬μ‹œκ°„ T초λ₯Ό λ§žμΆ”κΈ° μœ„ν•œ μ΅œμ†Œλ²„νŠΌ μ‘°μž‘ 방법을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

μž…λ ₯

첫 번째 μ€„μ—λŠ” μš”λ¦¬μ‹œκ°„ T(초)κ°€ μ •μˆ˜λ‘œ μ£Όμ–΄μ Έ 있으며 κ·Έ λ²”μœ„λŠ” 1 ≤ T ≤ 10,000 이닀. 

좜λ ₯

μ—¬λŸ¬λΆ„μ€ T초λ₯Ό μœ„ν•œ μ΅œμ†Œλ²„νŠΌ μ‘°μž‘μ˜ A B C 횟수λ₯Ό 첫 쀄에 μ°¨λ‘€λŒ€λ‘œ 좜λ ₯ν•΄μ•Ό ν•œλ‹€. 각각의 횟수 μ‚¬μ΄μ—λŠ” 빈 칸을 λ‘”λ‹€. ν•΄λ‹Ή λ²„νŠΌμ„ λˆ„λ₯΄μ§€ μ•ŠλŠ” κ²½μš°μ—λŠ” 숫자 0을 좜λ ₯ν•΄μ•Όν•œλ‹€. 만일 μ œμ‹œλœ 3개의 λ²„νŠΌμœΌλ‘œ T초λ₯Ό 맞좜 수 μ—†μœΌλ©΄ 음수 -1을 첫 쀄에 좜λ ₯ν•΄μ•Ό ν•œλ‹€. 

풀이

λŒ€ν‘œμ μΈ 그리디 μ•Œκ³ λ¦¬μ¦˜

#include <iostream>
using namespace std;

int main(){
  int T, a, b, c, remainder;
  cin >> T;

  a = T/300;
  b = (T%300)/60;
  c = (T%60)/10;
  remainder = T%10;

  if (remainder == 0)
    cout << a << " " << b << " " << c;
  else
    cout << -1;
}

λŒ“κΈ€