Coding Test/[Python] Programmers lv1

[Python] Programmers lv1 2016년

winCow 2021. 5. 5. 12:14

1. 제출코드

from datetime import date
def solution(a, b):
    if (a == 1) & (b == 1):
        answer = "FRI"
    else:
        difference = date(2016, a, b) - date(2016, 1, 1)
        difference_int = int(str(difference).split('day')[0])
        if difference_int % 7 == 0:
            answer = 'FRI'
        elif difference_int % 7 == 1:
            answer = 'SAT'
        elif difference_int % 7 == 2:
            answer = 'SUN'
        elif difference_int % 7 == 3:
            answer = 'MON'
        elif difference_int % 7 == 4:
            answer = 'TUE'
        elif difference_int % 7 == 5:
            answer = 'WED'
        elif difference_int % 7 == 6:
            answer = 'THU'
    return answer

날짜를 계산하기 위해 datetime 모듈의 date 객체를 가져온다.

기준일인 2016년 1월 1일은 금요일이며 기준일과 같은 날짜를 계산할 필요는 없으므로 a = 1, b = 1일 때는 금요일을 반환하도록 한다.

difference 변수에, a월 b일에서 1월 1일을 뺀 값을 할당하면 n days hh:mm:ss 형태로 결과를 얻을 수 있다. 이 데이터를 str()로 문자열로 만들고, day를 구분자로 하여 슬라이싱한 뒤 첫 번째 요소를 선택하면 a월 b일과 1월 1일 사이에 며칠이 있는지를 확인할 수 있다. 이를 정수로 변환한 값을 difference_int에 할당한다.

difference_int를 7로 나눈 나머지에 따라 각각 요일을 반환하도록 한다.

 

 

2. 반성

else 부분에서, 비슷한 if문이 반복되었기 때문에 다른 방법을 사용할 수 있을 것 같았는데, 딕셔너리를 떠올리지 못하고 제출했었다.

from datetime import date
def solution(a, b):
    if (a == 1) & (b == 1):
        answer = "FRI"
    else:
        difference = date(2016, a, b) - date(2016, 1, 1)
        difference_int = int(str(difference).split('day')[0])
        days = {
        0: 'FRI',
        1: 'SAT',
        2: 'SUN',
        3: 'MON',
        4: 'TUE',
        5: 'WED',
        6: 'THU',
        }
        n = (difference_int % 7)
        answer = days[n]
    return answer
solution(a, b)

위와 같이 if문을 조금 더 간략하게 작성할 수 있다. 다른 사람들의 풀이를 보니, 각 월에 따른 일수를 딕셔너리로 이용하는 경우도 있었다.