문제: 2016년
2016년 1월 1일은 금요일이다. 2016년 a월 b일은 무슨 요일일까? 두 수 a,b를 입력 받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수 작성 2016년은 윤년이다. (윤년은 2월 29일까지 있다.)
생각한 방법
a는 월을 말한다.
1,3,5,7,8,10,12이면 31일까지 있고
2월이면 29일까지 있고
4,6,9,11은 30일까지 있다.
month란 리스트에 위의 월을 다 담는다.
결과값을 출력할 문자열을 선언한다
FRI,SAT,SUN,MON,TUE,WED,THU
1월 1일이 금요일이니까. 금요일부터 먼저 선언.
이후
각 월에 해당하는 총합 구해서,
일을 더해서
그것을 7로 나눠서 나온 나머지 값을 문자열 리스트에 더해서 계산한다.
def solution(a, b):
month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
day = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED']
total = sum(month[0: a-1])+b
while(total >= 7):
total = total % 7
return day[total]
print(solution(5, 24))
다른 사람 코드
def getDayName(a,b):
months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
days = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
return days[(sum(months[:a-1])+b-1)%7]
#아래 코드는 테스트를 위한 출력 코드입니다.
print(getDayName(5,24))
여기서 착안할 수 있는 점은, 반복문을 굳이 돌리지 않고, 리스트가 반복될 경우 %연산자를 활용하면 된다는 것이다. 이는 이틀 전에 풀었던 완전탐색 문제에서도 유효했었다. 이 기법 까먹지 말자. 환형 큐에서도 활용했던 거다.
참고자료 [프로그래머스]https://programmers.co.kr/learn/challenges