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문을 조금 더 간략하게 작성할 수 있다. 다른 사람들의 풀이를 보니, 각 월에 따른 일수를 딕셔너리로 이용하는 경우도 있었다.