우노
[Greedy] 백준 10162번 "전자레인지" C++ 풀이 본문
문제 링크
풀이
- 초단위의 요리시간이 입력으로 들어왔을 때,
- 요리 시간이, A 버튼의 시간인 300초보다 크다면, 요리 시간을 300초로 나눈 뒤,
- 나눠진 몫을 A 버튼 사용 개수로 저장하고, 나머지를 남은 요리시간으로 저장합니다.
- 남은 요리 시간이, B 버튼의 시간인 60초보다 크다면, 요리 시간을 60초로 나눈 뒤,
- 나눠진 몫을 B 버튼 사용 개수로 저장하고, 나머지를 남은 요리시간으로 저장합니다.
- 남은 요리 시간이, C 버튼의 시간인 10초보다 크다면, 요리 시간을 10초로 나눈 뒤,
- 나눠진 몫을 C 버튼 사용 개수로 저장합니다.
- 이후에도 요리 시간이 남는다면, -1 을 출력합니다.
코드
#include <iostream>
using namespace std;
// 버튼 개수 초기화
int a_count, b_count, c_count = 0;
// 버튼 별 지정 시간
int a=300, b=60, c=10;
// 최소 버튼 계산 함수
int greedy(int t){
// 더 이상 남은 시간을 처리할 수 없을때까지
while(t!=0){
if (t >= a){
a_count += t/a;
t = t%a;
}else if (t >= b){
b_count += t/b;
t = t%b;
}else if (t >= c){
c_count += t/c;
t = t%c;
}else{
return -1;
}
}
return 0;
}
int main(){
// 입력 초
int t;
cin >> t;
// 최소 버튼 계산 실행
int result = greedy(t);
// 시간을 정확히 나눌 수 있다면
if (result == 0){
cout << a_count << " " << b_count << " " << c_count << endl;
}
// 시간을 정확히 나눌 수 없다면
else{
cout << -1 << endl;
}
}
'Algorithm > Greedy' 카테고리의 다른 글
[Greedy] 이코테 “큰 수의 법칙” Python 풀이 (0) | 2022.05.30 |
---|---|
[Greedy] 백준 1744번 "수 묶기" C++ 풀이 (0) | 2022.02.15 |
[Greedy] 백준 13305번 "주유소" C++ 풀이 (0) | 2022.02.14 |
[Greedy] 백준 11000번 "강의실 배정" C++ 풀이 (0) | 2021.12.07 |
[Greedy] 백준 11047번 "동전 0" C++ 풀이 (0) | 2021.12.07 |
Comments