JB의 이모저모

[BOJ 24390🥈1] 또 전자레인지야? (Python) 본문

알고리즘/백준

[BOJ 24390🥈1] 또 전자레인지야? (Python)

J B 2023. 9. 22. 21:55

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

 

24390번: 또 전자레인지야?

첫 줄에 잇창명이 원하는 조리시간이 M:S 형태로 주어진다(0 ≤ M ≤ 60, 0 ≤ S ≤ 59). M은 분, S는 초이며, 항상 두 자리 숫자로 주어진다. 조리시간은 10초 이상 60분(3600초) 이하이며, 항상 10의 배수

www.acmicpc.net

문제

잇창명의 집에는 오래된 전자레인지가 있다. 백준 온라인 저지에서 문제를 너무 많이 푼 잇창명은 문득 이런 궁금증이 생기기 시작했다.

버튼을 최소 몇 번 눌러야 조리시간 2분을 맞출 수 있을까?

잇창명의 전자레인지에는 다음과 같이 버튼이 4개 있고, 각 버튼을 누르면 다음과 같이 작동한다. 초기 상태에는 조리시간이 0초이고, 조리 중이 아니며, 조리시작 버튼을 눌러야 조리가 시작된다.

  • 10초: 조리시간이 10초 늘어난다.
  • 1분: 조리시간이 1분(60초) 늘어난다.
  • 10분: 조리시간이 10분(600초) 늘어난다.
  • 조리시작
    • 조리 중이 아닐 때: 조리가 시작된다. 만약에 조리시간이 0초였다면 30초로 늘어난다.
    • 조리 중일 때: 조리시간이 30초 늘어난다.
  • 모든 버튼은 조리 중인지의 여부와 무관하게 항상 누를 수 있으며, 별도의 언급이 없을 경우 항상 같은 동작을 한다.

예를 들어 이 전자레인지로 2분을 맞추려면 조리시작 버튼을 4번 누르면 되지만, 최적의 방법은 아니다. 그 대신 1분-1분-조리시작 순서로 버튼을 누르면 버튼을 누른 횟수가 3번이 되어 최적이다. 1분-1분의 경우에는 조리가 되지 않기 때문에 최적이 아니다. 실제로는 조리 중에는 남은 조리시간이 계속 줄어들고 중간에 조리를 취소할 수 있지만, 이 문제에서는 생각하지 않기로 한다.

잇창명은 지난 한 학기 동안 전자레인지를 이용할 때마다 매번 문제로 내고 싶은 마음이 들어서 괴로워하고 있다. 잇창명을 도와주자!

입력

첫 줄에 잇창명이 원하는 조리시간이 M:S 형태로 주어진다(0 ≤ M ≤ 60, 0 ≤ S ≤ 59). M은 분, S는 초이며, 항상 두 자리 숫자로 주어진다.

조리시간은 10초 이상 60분(3600초) 이하이며, 항상 10의 배수이다.

출력

주어진 조리시간을 맞추기 위해 버튼을 눌러야 하는 최소 횟수를 출력한다.

예제 입력 1

02:00

예제 출력 1

3

 

⭕ CODE

m,s = map(int,input().split(':'))

count = 0

# 10분 단위로 나눈거 더해주기
count += m // 10
# 1분 단위로 나눈거 더해주기
count += m % 10

# 초가 30초 이상이면
if s >= 30:
		# 처음에 조리시작 누름 -> 30초가 줄어든다
    count += 1
		# s초에서 30초를 뺀거의 몫을 10초 단위로 나눈거
    count += (s-30) // 10
# 초가 30초 이하면
# 조리시간 먼저 늘이고 시작 누름
elif s < 30:
    # 조리 시간 늘이고 시작버튼 누르기
    count += 1
		# 10초 단위로 나눈거 더해주기
    count += s//10
print(count)

✏️ Comment

10분, 1분, 10초 단위로 나누어서 생각했고 무조건 조리시작 버튼을 눌러야하기에 초가 30초 이상이면 시작부터 조리시작 버튼을 눌러 30초를 줄어들게 하였고 초가 30초 이하면 조리 시간을 늘여두고 시작버튼을 눌렀다.