오늘의 인기 글
최근 글
최근 댓글
Today
Total
11-25 04:00
관리 메뉴

우노

[Greedy] 백준 10162번 "전자레인지" C++ 풀이 본문

Algorithm/Greedy

[Greedy] 백준 10162번 "전자레인지" C++ 풀이

운호(Noah) 2022. 2. 14. 14:22

문제 링크

풀이

  • 초단위의 요리시간이 입력으로 들어왔을 때,
  • 요리 시간이, 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;
    }
}
Comments