Etc/PS
BOJ_10162 전자레인지 -Python3
CHOEEE
2022. 8. 11. 18:32
BOJ_10162 전자레인지 -Python3
문제분석
1. 관찰
- 3개의 버튼
- 300초, 60초, 10초
- A,B,B를 눌러 T초가 되도록하는 최소버튼 조작의 경우를 출력한다.
2. 복잡도
- O((T*T*T)//(300*60*10)) = (10000*10000*10000)//(300*60*10) >> 약 천만 가능
3. 자료구조
- 조합: int[]
해결코드
import sys
si = sys.stdin.readline
T = int(si())
flag = float('inf')
ans = [0,0,0]
for i in range(T//300+1):
for j in range(T//60+1):
for k in range(T//10+1):
if 300*i + 60*j +10*k == T:
flag = min(flag, i+j+k)
if flag == i+j+k: # 가장 작은 경우 정답리스트 업데이트
ans[:]=[i,j,k]
if flag==float('inf'):
print(-1)
else:
print(*ans)
배운점
브론즈 4 문제인데 왜 이렇게 어렵게 풀었나 싶어서, 다른 코드를 살펴보았다.
다른 코드를 보고나니 내가 for문의 상한선으로 지정한 부분이 최소값이 된다는 사실을 알게됐다.
loop을 돌릴 필요가 없었다 ㅎㅎ
추가로, 보고서 감탄한 코드를 남긴다.
리스트 뒤에 조건문을 붙인 형식으로 출력을 했는데, 처음 보는 문법이라 신기했다.
해당 문법은 찾아봐야겠다.
참고코드
n=int(input());a=n//300;n%=300;b=n//60;n%=60;print(*[[-1],[a,b,n//10]][n//10==n/10])