Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 12시간제 시간 문자열에 분 추가하기

프로그래밍 문제를 풀다 보면 시간 계산 로직을 구현해야 하는 경우가 자주 있습니다. 이번 글에서는 am 또는 pm 접미사가 붙은 12시간제 시간 문자열과 정수 n이 주어졌을 때, n분을 더한 뒤 동일한 형식으로 새로운 시간을 반환하는 방법을 알아보겠습니다.

문제 예시

예를 들어 입력이 다음과 같다고 가정해 보겠습니다.

  • s = "8:20pm"
  • n = 150

150분(2시간 30분)을 더하면 출력 결과는 10:50pm이 됩니다.

해결 접근 방법

이 문제는 다음 단계를 순서대로 수행하면 해결할 수 있습니다.

  1. 문자열 s에서 시(h)와 분(m) 부분을 추출합니다.
  2. h := h mod 12 로 변환합니다.
  3. 시간 s가 'pm'이라면 h에 12를 더합니다. (24시간제로 변환)
  4. t := h * 60 + m + n 을 계산하여 총 분 단위 값을 구합니다.
  5. divmod 연산으로 t를 60으로 나누어 몫은 h, 나머지는 m에 저장합니다.
  6. h := h mod 24 로 하루 범위 내의 시간으로 조정합니다.
  7. h가 12 미만이면 suffix는 'am', 그렇지 않으면 'pm'으로 설정합니다.
  8. h := h mod 12 로 12시간제 표기로 되돌립니다.
  9. 만약 h가 0이라면 h를 12로 변경합니다. (자정과 정오 표기 규칙)
  10. 최종적으로 "h:m suffix" 형태의 문자열을 반환합니다.

파이썬 구현 코드

아래 코드를 통해 실제 구현 과정을 더 잘 이해할 수 있습니다.

class Solution:
    def solve(self, s, n):
        h, m = map(int, s[:-2].split(':'))
        h %= 12
        if s[-2:] == 'pm':
            h += 12
        t = h * 60 + m + n
        h, m = divmod(t, 60)
        h %= 24
        suffix = 'a' if h < 12 else 'p'
        h %= 12
        if h == 0:
            h = 12
        return "{:02d}:{:02d}{}m".format(h, m, suffix)

ob = Solution()
print(ob.solve("8:20pm", 150))

입력

"8:20pm", 150

출력

10:50pm

코드 핵심 포인트 정리

  • s[:-2]: 문자열 끝의 'am'/'pm' 두 글자를 제외한 시간 부분만 추출합니다.
  • map(int, split(':')): 콜론(:) 기준으로 분리한 후 각각 정수형으로 변환합니다.
  • divmod(t, 60): 몫과 나머지를 한 번에 구해 시와 분으로 나누는 파이썬다운 방식입니다.
  • {:02d}: 한 자리 숫자일 때 앞에 0을 채워 '08:20'처럼 두 자리로 출력합니다.

이 알고리즘의 시간 복잡도는 O(1)로, 입력 크기와 관계없이 일정한 시간 안에 결과를 얻을 수 있습니다. 날짜·시간 문자열 파싱과 모듈로 연산(mod)을 활용하면 다양한 시간 계산 문제에도 응용할 수 있으니 꼭 기억해 두세요.