백준 문제풀이/그리디 알고리즘

Greedy Algorithm - [백준 문제 : 10162] 전자레인지 풀이

국진맨 2020. 11. 18. 11:12

 

 

 

 

 

 

 

우선 A, B, C로 각각 다른 조리 시간 버튼의 조합으로 T(요리시간)을 정확하게 맞출 수 있냐?

만약 맞출 수 있다면 A번 누른 횟수, B번 누른 횟수, C번 누른 횟수를 출력하라는 문제입니다. 

 

 

<C++>

// Example program
#include <iostream>
#include <string>

using namespace std;
int main()
{

	//결과값:최소 기능 사용 횟수
	int Acount = 0;
	int Bcount = 0;
	int Ccount = 0;

	// 전자레인지 도구(단위:second)
	int A = 300;
	int B = 60;
	int C = 10;

	//요리시간 T
	int T = 0;

	//불가능 여부 체크 flag
	bool impossibleFlag = false;

	cin >> T;

	while (T != 0)
	{

		if (T >= A)
		{
			//A기능 사용 나눈 몫
			Acount = T / A;
			//A기능 사용 후 나머지
			T = T % A;

		}
		else if (T >= B) {
            
			// B기능 사용 나눈 몫
			Bcount = T / B;
            // B기능 사용 후 나머지
			T = T % B;

		}
		else if (T >= C) {

            // C기능 사용 나눈 몫
			Ccount = T / C;
            // C기능 사용 후 나머지
			T = T % C;
		}
		else
		{

			if (T != 0)

			{
				// A,B,C로 계속 나눴지만 나머지가 남아
				// T 를 나누기 불가능한 경우
				impossibleFlag = true;
				break;
			}
		}
	}

	//T 나누기 불가능 여부 체크 후 
	//각각 결과 값 출력 분기문
	if (impossibleFlag == true)
	{
		cout << -1 << endl;
	}
	else {
		cout << Acount << " " << Bcount << " " << Ccount << endl;

	}
}

 

<Python>

# T 요리시간 단위 초
T = int(input())

# 조리시간 A,B,C도 초 단위로 맞춤
A = 300
B = 60
C = 10


#A,B,C각각의 count를 저장할 변수
A_cnt = 0;
B_cnt = 0;
C_cnt = 0;

#A,B,C로 나누어 떨어지지 않을 경우를 위한 flag
impossible_flag = False

while T != 0:
    
    
    if T >= A:
        A_cnt = int(T/A)
        T = T%A
    
    elif T>= B:
        B_cnt = int(T/B)
        T = T%B
    elif T>= C:
        C_cnt = int(T/C)
        T = T%C
    else:
        if T!= 0:
            impossible_flag = True
            break
        
if impossible_flag == True:
    print(-1)
else:
    print(A_cnt, B_cnt, C_cnt)