안경잡이 구루루

백준 10162 (전자레인지) [Python/파이썬] [Greddy/그리디] 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 10162 (전자레인지) [Python/파이썬] [Greddy/그리디]

구루루(gururu) 2023. 9. 16. 20:46
반응형

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

 

10162번: 전자레인지

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

www.acmicpc.net

 


나:

T = int(input())
buttons = [300,60,10]
result = []
count = 0

for button in buttons:
    count = T//button
    result.append(count)
    T = T%button

if T == 0:
    print(*result)
else:
    print(-1)

완성된 코드는 위와 같다. 

 

(1)
T = int(input())
buttons = [300,60,10]
result = []
count = 0

입략값 T는 '초'  단위로 받는다 . 그래서 이후 A,B,C 각 버튼의 지정된 시간 또한 마찬가지로 초 단위로 변형시켜 bouttons 리스트에 넣어 활용하고자 했다.

최종 줄력값을 담을 result 리스트 선언했고 각 버튼을 누를 횟수에 해당하는 count 변수 또한 선언했다.

 

(2)
for button in buttons:
    count = T//button
    result.append(count)
    T = T%button

문제에서는 A, B, C 를 누른 횟수의 합은 항상 최소가 되야한다는 것을 전제로 하고있다. 

이를 만족시키기 위해서 그리디(greedy)를 활용하자면 가장 큰 단위의 버튼인 A부터 가장 작은 단위의 버튼인 C 순서로 버튼을 눌러야 함을 알 수 있다. 

그래서 각 버튼별로 누를 횟수들을 count에 담아 나중에 이들을 append() 함수를 이용해 출력할 result 리스트에 담았다.

다음 단위의 버튼의 횟수를 계산할 때는 앞의 단위의 버튼에서 나온 나머지값으로 계산을 해야하기 때문에 나머지값을 다시 T에 넣어주었다.

 

(3)
if T == 0:
    print(*result)
else:
    print(-1)

각 버튼들을 적절히 눌러 그 시간의 합이 정확히 T초를 만족하면 앞서 계산한 횟수들을 모두 출력시키고 만약 합이 T가 안된다면 -1 을 출력시켜야한다.

우리는 각 버튼별로 계산한 나머지를 T에 다시 담았기 때문에 그 T값이 0인지 아닌지 따져서 0이면 그 횟수들을 모두 출력하게 해 주었다.

이때 대괄호 없이 빈칸을 기준으로 각 버튼별 누르는 횟수가 출력되야 하기 때문에 애스터리스크(*) 를 활용함


다른사람

ex_1.

(출처: https://claude-u.tistory.com/235)

T = int(input())

if T % 10 != 0:
    print(-1)
else:
    A = B = C = 0
    A = T // 300
    B = (T % 300) // 60
    C = (T % 300) % 60 // 10
    print(A, B, C)

완성된 코드는 위와 같다,

위 코드에서 주목해야 할 점은 거스름돈 문제와 비슷한 경우처럼 위 코드들처럼 몫과 나머지만을 이용해서 충분히 구현할 수 있음을 인지할 필요가 있다.

또한 출력할 때 구지 리스트 이용 없이 그저 각각의 값에 해당하는 변수를 만들어 콤마(,) 를 이용해 띄어쓰기 구현하는 방식이 있음을 생각하자


ex_2.

(출처: https://ludere.tistory.com/55 )

n = int(input())

if n%10 != 0:
	print(-1)
else:
	for i in [300, 60, 10]:
		print(n//i, end=' ')
		n = n%i

완성된 코드는 위와 같다. 

ex_1과 마찬가지로 몫, 나머지를 적극 활용한 코드이지만 출력시 리스트 이외에 end 를 활용할 수 있음을 인지 하자는 의미로 가져옴

 

반응형