[프로그래머스] 2016년

YoungHyo Choi·2021년 4월 3일
0

Coding Test

목록 보기
8/31

https://programmers.co.kr/learn/courses/30/lessons/12901#

문제 설명

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일같은 날짜는 주어지지 않습니다)

입출력 예

abresult
524"TUE"

풀이

def solution(a, b):
    answer = ''
    weekend = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
    days = 4 # 1/1일이 금요일
    
    # a월 전달까지의 일수를 먼저 계산
    for i in range(a):
        if i == 0:
            pass
        elif i == 2:
            days += 29
        elif i < 8: # 7월까지
            if i % 2 == 0:
                days += 30
            else:
                days += 31
        else:
            if i % 2 == 0:
                days += 31
            else:
                days += 30
    
    days += b # 현재 달의 해당 일수 더하기
    answer = weekend[days % 7]
    
    return answer
  • a월의 전달까지 일수를 계산한 뒤에 b를 더해 총 일수를 계산한 뒤에 7로 나누고 2016년 1월 1일이 금요일이기 때문에 금요일 인덱스인 5를 더해 출력
  • 2016년이 윤달이기 때문에 2월에 대해서는 29를 더해주고 7월과 8월이 31일이기 때문에 8월을 기점으로 days에 더해주는 월간 일수를 바꿔서 다시 계산

정리

  • 가장 웃겼던 풀이는 모든 월에 대한 조건을 작성하는데 12중 if문을 사용해서 예술로 승화시킨 답...
  • 월별 일수에 대한 리스트를 생성해서 해당 월까지 인덱싱하는 방법이 가장 깔끔하다고 느꼈다.
profile
golang과 elasticsearch를 좋아하는 3년차 백엔드 엔지니어입니다.

0개의 댓글