▶ 문제 설명
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일같은 날짜는 주어지지 않습니다)
▶ 입출력 예
a b result
5 | 24 | "TUE" |
▶ 내가 짠 코드
def solution(a, b):
days=['FRI','SAT','SUN','MON','TUE','WED','THU']
i = 1
sum = 0
while i<a:
if i in [1,3,5,7,8,10,12]:
sum+= 31
elif i in [2,4,6,9,11]:
if i == 2:
sum += 29
else:
sum += 30
i+=1
sum+=b
print(sum)
return days[(sum%7)-1]
리스트에 요일을 담아주는데 이 때, 1월1일이 금요일이므로 인덱스 값을 생각해서 조정하였다.
그리고 a월 전까지 달마다 다른 요일수를 가지고 있으므로 구분하여 sum에 담아준 후
a월에 해당하는 날짜 b를 마지막으로 더해준 다음 요일수 7로 나누어 인덱스로 해당 요일을 구한다.
(인덱스가 0부터 시작하는 것에 주의한다.)
▶ 참고사항
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))
다른 사람의 풀이를 참고했는데 달 별 날짜 수를 리스트에 넣어서 처리하는 방법도 있었다.
요일을 리스트에 넣는 것보다 훨씬 간단한 것 같다.
728x90
'자료구조 & 알고리즘 & cs > CodingTest' 카테고리의 다른 글
프로그래머스 LEVEL1 - [1차] 비밀지도 (0) | 2022.06.20 |
---|---|
프로그래머스 LEVEL1 - 최소직사각형 (0) | 2022.06.17 |
프로그래머스 LEVEL1 - 두 개 뽑아서 더하기 (0) | 2022.06.16 |
프로그래머스 LEVEL1 - 예산 (0) | 2022.06.15 |
프로그래머스 LEVEL1 - 3진법 뒤집기 (0) | 2022.06.15 |