알람 시계

he2mang·2024년 1월 25일

코딩테스트/python

목록 보기
2/5
post-thumbnail

백준 2884번 문제 입니다.

📌 문제 설명

상세 설명: https://www.acmicpc.net/problem/2884

  • 학교에 지각하지 않기 위해 기존에 설정해둔 알람시간을 45분 앞선 시간으로 바꾸려 한다.
  • 첫째 줄에 두 정수 H와 M이 주어진다. (0 <= H <= 23,0 <= M <= 59)
  • 입력 시간은 24시간 표현을 사용하며, 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.

📌 문제 풀이

origTime = input()
hour = int(origTime.split(' ')[0])
min = int(origTime.split(' ')[1])

if min - 45 >= 0:
    min = min - 45
    print(hour, min)
elif min - 45 < 0:
    min += 15
    if hour == 0:
        hour = 23
        print(hour, min)
    else:
        hour -= 1
        print(hour, min)
  1. 분(min)의 2가지 케이스
  • 첫째, 45분을 뺐을 때 남은 분(min)의 수가 0 이상인 경우
  • 둘째, 45분을 뺐을 때 0보다 작은 숫자가 남는 경우

첫째 케이스는 가장 쉽게 풀 수 있다. 첫번째 if문에서 볼 수 있듯이 hour(시)에는 손대지 않고 분만 빼기 연산 해준다. 두번째 케이스는 또 두가지 경우로 나뉜다.

  1. 시(hour)의 2가지 케이스
    분(min)에서 45분을 뺐을 때, 0보다 작은 수가 남는다는 것은 시간(hour)에서 1을 빼주고 분(min) 역시 수정해주어야 한다. 이러한 경우 다음과 같은 두 가지 케이스로 다시 나뉜다.
  • 첫째, 주어진 시(hour)가 0인 경우
  • 둘째, 주어진 시(hour)가 0이 아닌 경우

우선, 시간 계산을 할 때 분이 0보다 작을때 45분을 뺀 뒤 분(min)이 같는 공통적인 특징을 확인할 수 있다.
(ex. 35분 -> 50분, 20분 -> 35분, 10분 -> 25분)

그러므로 주어진 분(min)에서 15를 더해주면 된다. 따라서 min += 15이다. 이제 시(hour)를 계산해야하는데 첫번째의 경우 0시 이전은 23시이므로 hour을 23으로 확정지을 수 있다. 그렇지 않은 경우에는 주어진 수에서 -1 연산을 해주면 된다.

생각해 볼 것

  • 팀스터디를 통해 팀원과 풀이를 공유하는 과정에서 다음 코드를 더 짧고 효율적으로 수정할 수 있었다. 조금 더 효율적인 코드를 작성할 수 있는 방향으로 고민을 해 봐야 할 것 같다.
    # 수정 전
    origTime = input()
    hour = int(origTime.split(' ')[0])
    min = int(origTime.split(' ')[1])
    # 수정 후
    hour, min = map(int, input().split())

    내가 작성했던 기존 코드보다 약 4초의 시간이 줄어들었다.

0개의 댓글