오븐 시계
문제는 다음과 같습니다.
문제를 요악하자면, 오븐에 넣었던 현재 시간에 소요 시간을 계산 해 예상 시간을 알려주는 프로그램을 작성하는 것 입니다.
이 전 게시글과 매우 흡사하지만 이번에는 시간을 추가해야 하는 프로그램 입니다.
이번에는 현재 시간에 분을 더 했을 때 60분이 넘어가면 시간을 더 해주고 또한 남은 분 만큼 더해줘야 하는 것이 키포인트 같습니다. 입력 조건에는 1000분 까지 입력이 가능하기 때문에 시간이 초과 되었을 경우 계산 하는 방식이 초과 되었을 경우에 추가된 분을 60으로 나누었을 때 나머지를 기존에 있던 분과 더하여 빼면 됩니다.
코드를 보며 설명하겠습니다. 다음은 제가 작성한 해답 코드입니다.
hours, minutes = map(int, input().split())
cooking_time = int(input())
if minutes + cooking_time >= 60:
additional_hours = int((minutes + cooking_time) / 60)
new_minutes = int((minutes + cooking_time) % 60)
if hours + additional_hours >= 24:
print(additional_hours + hours - 24, new_minutes)
else:
print(hours + additional_hours, new_minutes)
else:
print(hours, minutes + cooking_time)
이 코드의 동작 방식을 자세히 설명해드리면
- 입력값 처리
- hours, minutes: 현재 시간과 분을 입력받습니다
- cooking_time: 요리에 필요한 시간(분)을 입력받습니다
- 시간 계산 로직
- 첫 번째 조건문 (minutes + cooking_time >= 60):
- 현재 분과 요리시간을 더했을 때 60분 이상이 되는 경우를 체크합니다
- additional_hours: 추가되는 시간을 계산합니다
- new_minutes: 새로운 분을 계산합니다 (60으로 나눈 나머지)
- 두 번째 조건문 (hours + additional_hours >= 24):
- 현재 시간에 추가 시간을 더했을 때 24시가 넘는지 체크합니다
- 24시가 넘으면 24를 빼서 다음 날의 시간으로 조정합니다
- 24시가 넘지 않으면 그대로 시간을 더합니다
- else 구문:
- 60분이 넘지 않는 경우는 단순히 분만 더해서 출력합니다
이 문제의 정답 비율은 약 38%입니다.
아래는 다른 사람의 공개된 오답 코드입니다.
이 코드 뿐만 아니라 다른 코드들도 보면 모두 논리에 대해서 틀림을 알 수 있습니다. 실수보다는 논리 자체가 틀린 사람이 많다고 봅니다.
이 코드에는 몇 가지 논리적 오류가 있습니다:
- 시간 계산의 기준값 오류:
if (b+c) > 60 :
- 60보다 '크다'가 아니라 '크거나 같다'로 해야 합니다
- 즉, if (b+c) >= 60: 로 수정해야 합니다
- 23시 처리 오류:
if a<23:
- 23시도 정상적인 시간이므로 23시를 포함해야 합니다
- 즉, if a<=23: 로 수정해야 합니다
- 24시간 초과 처리 오류:
print(a+(b+c)//60,(b+c)%60)
- 더해진 시간이 24를 넘어가는 경우를 처리하지 않았습니다
시간을 다루는 알고리즘 방식을 소개했고, 다음에는 이보다 더 간단한 datetime에 대해 소개드리겠습니다.
'BaekJoon Reivew' 카테고리의 다른 글
단계별로 풀어보기 백준_2739번 (0) | 2025.02.06 |
---|---|
단계별로 풀어보기 백준_2480번 (0) | 2025.02.05 |
단계별로 풀어보기 백준_2884번 (0) | 2025.02.05 |
단계별로 풀어보기 백준_14681번 (0) | 2025.02.05 |
단계별로 풀어보기 백준_2753번 (0) | 2025.02.05 |