NIRVANA
[level 1] 2016년 본문
문제
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"를 반환하세요.
제한 조건
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
문제 풀이 접근법1
1) 2016년을 기준으로, 숫자를 나누었을 때 나머지가 0이면 목요일, 1이면 금요일, 2면 토요일, 3이면 일요일, 4면 월요일, 5면 화요일, 6이면 수요일이므로 {0:'THU', 1:'FRI', 2:'SAT', 3:'SUN', 4:'MON', 5:'TUE', 6:'WED'}인 딕셔너리를 만든다
2) a-1번 만큼 반복하면서 i+1이 2이면 29를 더하고, 4, 6, 9, 11이면 30을, 나머지이면 31을 더한다.
3) b를 더하여 a월 b일이 1월1일로부터 얼마나 지난 날인지를 구한다.
4) days와 7을 나눈 나머지를 구한 뒤, 해당 숫자(=key)에 해당하는 value값을 반환한다.
def solution(a, b):
days = 0
week = {
0:'THU', 1:'FRI', 2:'SAT', 3:'SUN', 4:'MON', 5:'TUE', 6:'WED'
}
for i in range(a-1):
if i+1 == 2:
days += 29
elif i+1 == 4 or i+1 == 6 or i+1 == 9 or i+1 == 11:
days += 30
else:
days += 31
days += b
days = days % 7
return week[days]
다른 분들 풀이
def getDayName(a,b):
month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
day = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
return day[(sum(month[:a-1])+b-1)%7]
#아래 코드는 테스트를 위한 출력 코드입니다.
print(getDayName(5,24))
배열 슬라이싱으로과 sum()함수를 사용해서 a-1달까지의 일수와 b 일수를 더한 수와 7을 나눈 나머지가 리스트의 첨자값이 되게 한 점이 인상 깊었다.
나는 그냥 b를 다 더해서 아예 딕셔너리를 새로 정의했는데 이분은 b-1을 더하여서 fri부터 0이 시작되게 하신 것 같다.
'Coding test(Python3) > Programmers' 카테고리의 다른 글
[level 1] 카드 뭉치 (0) | 2023.08.04 |
---|---|
[level 1] 폰켓몬 (0) | 2023.08.02 |
[level 1] 명예의 전당(1) (나중에 꼭 다시 풀어보기..) (0) | 2023.08.02 |
[level 1] 추억 점수 (0) | 2023.08.02 |
[level 1] 콜라 문제 (0) | 2023.07.31 |