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

파이썬으로 시각(시·분)을 영어 텍스트 형식으로 변환하는 프로그램 만들기

문제 개요

시(hour)와 분(minute)이라는 두 개의 입력값이 주어졌을 때, 해당 시각을 영어 텍스트 형식으로 출력하는 프로그램을 작성해 보겠습니다. 영어에서는 시각을 다음과 같이 특수한 방식으로 표현합니다.

  • 8:00 → "eight o' clock" (여덟 시 정각)
  • 8:01 → "one minute past eight" (여덟 시 1분 지남)
  • 8:10 → "ten minutes past eight" (여덟 시 10분 지남)
  • 8:15 → "quarter past eight" (여덟 시 15분, quarter는 15분을 의미)
  • 8:30 → "half past eight" (여덟 시 반)
  • 8:40 → "twenty minutes to nine" (아홉 시 20분 전)
  • 8:45 → "quarter to nine" (아홉 시 15분 전)
  • 8:47 → "thirteen minutes to nine" (아홉 시 13분 전)
  • 8:28 → "twenty eight minutes past eight" (여덟 시 28분 지남)

예를 들어 입력이 h = 9, m = 42라면 출력은 "eighteen minutes to ten", 즉 '열 시 18분 전'이 됩니다.

해결 접근 방법

이 문제는 조건 분기를 활용해 단계별로 해결할 수 있습니다.

  1. 1부터 30까지 숫자에 대응하는 영어 텍스트 리스트를 준비합니다. 이때 15는 "fifteen" 대신 "quarter", 30은 "half"로 표현하는 것이 핵심입니다.
  2. 결과를 담을 빈 문자열 op를 초기화합니다.
  3. m이 0이면: op = text[h-1] + " o' clock"
  4. m이 30이면: op = text[m-1] + " past " + text[h-1]
  5. m이 1이면: op = text[m-1] + " minute past " + text[h-1]
  6. m이 15이면: op = text[m-1] + " past " + text[h-1]
  7. m이 30 미만이면: op = text[m-1] + " minutes past " + text[h-1]
  8. m이 45이면: op = "quarter to " + text[h]
  9. 그 외(31~59분): op = text[(60-m)-1] + " minutes to " + text[h]
  10. 최종적으로 op를 반환합니다.

여기서 중요한 포인트는 30분을 기준으로 표현 방식이 달라진다는 것입니다. 30분 이전에는 현재 시를 기준으로 "past"(~시 지남)를 사용하고, 30분이 지난 후에는 다음 시를 기준으로 "to"(~시 전)를 사용합니다.

구현 예제

다음 파이썬 코드를 통해 실제 동작을 확인할 수 있습니다.

def solve(h, m):
    text = ["one", "two", "three", "four", "five", "six", "seven", "eight",
            "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
            "quarter", "sixteen", "seventeen", "eighteen", "nineteen",
            "twenty", "twenty-one", "twenty-two", "twenty-three",
            "twenty-four", "twenty-five", "twenty-six", "twenty-seven",
            "twenty-eight", "twenty-nine", "half"]

    op = ""
    if (m == 0):
        op = text[h - 1] + " o' clock"
    elif (m == 30):
        op = text[m - 1] + " past " + text[h - 1]
    elif (m == 1):
        op = text[m - 1] + " minute past " + text[h - 1]
    elif (m == 15):
        op = text[m - 1] + " past " + text[h - 1]
    elif (m < 30):
        op = text[m - 1] + " minutes past " + text[h - 1]
    elif (m == 45):
        op = "quarter to " + text[h]
    else:
        op = text[(60 - m) - 1] + " minutes to " + text[h]
    return op

h = 9
m = 42
print(solve(h, m))

입력

h = 9, m = 42

출력

eighteen minutes to ten

9시 42분은 열 시까지 18분이 남은 상태이므로 "eighteen minutes to ten"이 올바른 결과입니다. 이처럼 조건 분기와 인덱스 계산만으로 복잡해 보이는 영어 시각 표현 규칙을 간단하게 구현할 수 있습니다.