문제 설명

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT

입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.

제한 조건

입출력 예

제목 없음


첫 번째 접근

되게 간단해보였는데 월마다 일수가 순서로 규칙적이지 않아 (31일, 30일, 29일,,,) 아이디어를 떠올리기가 어려웠다. 2016년 1월 1일이 금요일이어서 'FRI'를 시작으로 일주일을 리스트로 만들었고, 월마다 1일이 무슨요일인지 알기 위해 모든 요일을 더하였다. (mod 7 이용)

풀면서 논리는 맞는 것 같은데 너무 코드가 길어지고 if문이 많아져.. 불안했지만 진행했다. 런타임 에러가 나서 71점 정도가 나왔다.

def solution(a, b):
    answer = ''
    days = ['FRI','SAT','SUN','MON','TUE','WED','THU']
    kind_31 = 31%7
    kind_29 = 29%7
    kind_30 = 30%7
    # 1.1은 금요일, 2.1은 월요일,,
    sum_days_1 = kind_31
    sum_days_2 = (sum_days_1 + kind_29) % 7
    sum_days_3 = (sum_days_2 + kind_31) % 7
    sum_days_4 = (sum_days_3 + kind_30) % 7
    sum_days_5 = (sum_days_4 + kind_31) % 7
    sum_days_6 = (sum_days_5 + kind_30) % 7
    sum_days_7 = (sum_days_6 + kind_31) % 7
    sum_days_8 = (sum_days_7 + kind_31) % 7
    sum_days_9 = (sum_days_8 + kind_30) % 7
    sum_days_10 = (sum_days_9 + kind_31) % 7
    sum_days_11 = (sum_days_10 + kind_30) % 7
    # sum_days_12 = (sum_days_11 + kind_31) % 7
    
    if a == 1:
        answer = days[(b-1)%7]
    elif a == 2:
        answer = days[sum_days_1 + (b-1)%7]
    elif a == 3:
        answer = days[sum_days_2 + (b-1)%7]
    elif a == 4:
        answer = days[sum_days_3 + (b-1)%7]
    elif a == 5:
        answer = days[sum_days_4 + (b-1)%7]
    elif a == 6:
        answer = days[sum_days_5 + (b-1)%7]
    elif a == 7:
        answer = days[sum_days_6 + (b-1)%7]
    elif a == 8:
        answer = days[sum_days_7 + (b-1)%7]
    elif a == 9:
        answer = days[sum_days_8 + (b-1)%7]
    elif a == 10:
        answer = days[sum_days_9 + (b-1)%7]
    elif a == 11:
        answer = days[sum_days_10 + (b-1)%7]
    elif a == 12:
        answer = days[sum_days_11 + (b-1)%7]
    
    return answer

두 번째 접근

if와 else if로 월을 비교할 때, days[]의 인덱스로 받아온 값을 연산해줄 때, mod 7을 해주지 않아 몇 가지 테스트케이스에서 런타임에러가 났다. 따라서 값을 더해주고 마지막에도 mod 7을 해주었더니 성공하였다.

def solution(a, b):
    answer = ''
    days = ['FRI','SAT','SUN','MON','TUE','WED','THU']
    kind_31 = 31%7
    kind_29 = 29%7
    kind_30 = 30%7
    # 1.1은 금요일, 2.1은 월요일,,
    sum_days_1 = kind_31
    sum_days_2 = (sum_days_1 + kind_29) % 7
    sum_days_3 = (sum_days_2 + kind_31) % 7
    sum_days_4 = (sum_days_3 + kind_30) % 7
    sum_days_5 = (sum_days_4 + kind_31) % 7
    sum_days_6 = (sum_days_5 + kind_30) % 7
    sum_days_7 = (sum_days_6 + kind_31) % 7
    sum_days_8 = (sum_days_7 + kind_31) % 7
    sum_days_9 = (sum_days_8 + kind_30) % 7
    sum_days_10 = (sum_days_9 + kind_31) % 7
    sum_days_11 = (sum_days_10 + kind_30) % 7
    # sum_days_12 = (sum_days_11 + kind_31) % 7
    
    if a == 1:
        answer = days[(b-1)%7]
    elif a == 2:
        i = (sum_days_1 + (b-1)%7) %7
        answer = days[i]
    elif a == 3:
        i = (sum_days_2 + (b-1)%7) %7
        answer = days[i]
    elif a == 4:
        i = (sum_days_3 + (b-1)%7) %7
        answer = days[i]
    elif a == 5:
        i = (sum_days_4 + (b-1)%7) %7
        answer = days[i]
    elif a == 6:
        i = (sum_days_5 + (b-1)%7) %7
        answer = days[i]
    elif a == 7:
        i = (sum_days_6 + (b-1)%7) %7
        answer = days[i]
    elif a == 8:
        i = (sum_days_7 + (b-1)%7) %7
        answer = days[i]
    elif a == 9:
        i = (sum_days_8 + (b-1)%7) %7
        answer = days[i]
    elif a == 10:
        i = (sum_days_9 + (b-1)%7) %7
        answer = days[i]
    elif a == 11:
        i = (sum_days_10 + (b-1)%7) %7
        answer = days[i]
    elif a == 12:
        i = (sum_days_11 + (b-1)%7) %7
        answer = days[i]
    
    return answer