백준 알고리즘

백준 - 10162번 전자레인지 python 문제풀이 [Hellfer]

Hellfer 2023. 12. 25. 21:27
728x90

https://www.acmicpc.net/problem/10162

 

10162번: 전자레인지

3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은

www.acmicpc.net

🔷 알고리즘 분류 - 수학, 구현, 그리디 알고리즘

난이도 - 브론즈 3

그리디 알고리즘(Greedy Algorithm)은 매 순간 최적이라고 생각되는 결정을 하는 방식으로 문제를 해결하는 알고리즘입니다. 

 

이 때문에 그리디 알고리즘은 '탐욕적'이라는 뜻의 '그리디'라는 이름이 붙었습니다. 

 

그리디 알고리즘이 작동하는 기본 원리는 간단합니다. 매 순간 최선의 선택을 하면서 전체 문제의 해결책을 찾아나갑니다. 

 

이 때문에 그리디 알고리즘은 많은 종류의 최적화 문제에 효율적으로 사용될 수 있습니다. 

 

그러나 그리디 알고리즘은 '항상 최적의 해결책을 보장하는가?'라는 중요한 질문에 대한 답이 '아니요'일 수 있다는 점에서 주의할 필요가 있습니다. 

 

그리디 알고리즘은 그 자체로 국소적인 최적해를 찾는 데는 탁월하지만, 이가 반드시 전체적인 최적해를 보장하진 않습니다.

🔶문제 풀이 - 그리디 알고리즘을 이용한 풀이

T = int(input())

# 각 버튼 A, B, C에 대한 카운트를 저장할 리스트를 초기화합니다.
count = [0, 0, 0]

# 만약 T가 10으로 나누어 떨어지지 않는다면, -1을 출력하고 프로그램을 종료합니다.
# 왜냐하면, C 버튼으로도 만들 수 없는 시간이기 때문입니다.
if T % 10 != 0:
    print(-1)
else:
    # A 버튼으로 나누어 떨어지는 만큼 나눕니다.
    count[0] = T // 300
    T %= 300

    # B 버튼으로 나누어 떨어지는 만큼 나눕니다.
    count[1] = T // 60
    T %= 60

    # C 버튼으로 나누어 떨어지는 만큼 나눕니다.
    count[2] = T // 10

    # 각 버튼의 카운트를 공백으로 구분하여 출력합니다.
    print(" ".join(map(str, count)))

🔶문제 이해하기

아래와 같이 입력값이 주어졌다고 가정해 보겠습니다.

 

100

 

1. T가 10으로 나누어 떨어지므로 if문이 아닌 else문을 수행합니다,

 

2. T가 300으로 나누어 떨어지지 않으므로 count [0]인 A버튼은 0이 됩니다.

 

3. T(=100)가 60으로 나누어 떨어지므로 count [1]인 B버튼은 1이 됩니다. T값은 40이 됩니다.

 

4. T(=40)가 10으로 나누어 떨어지므로 count [2]인 C버튼은 4가 됩니다. 

 

5. 아래와 같이 출력값을 출력하고 종료됩니다.

 

0 1 4

 

🤗파이팅입니다~ 여러분!!🤗

 

728x90