본문 바로가기

자료구조 & 알고리즘 & cs/CodingTest

프로그래머스 LEVEL1 - 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일같은 날짜는 주어지지 않습니다)

▶ 입출력 예

 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