[프로그래머스] Lv1 - 2016년

김멉덥·2023년 7월 17일
0

알고리즘 공부

목록 보기
39/171
post-thumbnail

문제

프로그래머스 연습문제


코드 구현

def solution(a, b):
    answer = ''

    # 윤년 -> 2월이 29일까지 있음

    # month_31 = [1, 3, 5, 7, 8, 10, 12]
    # month_30 = [4, 6, 9, 11]
    # month_29 = [2]

    starting_days = ['FRI', 'MON', 'TUE', 'FRI', 'SUN', 'WED', 'FRI', 'MON', 'THU', 'SAT', 'TUE', 'THU']    # 각 월별 시작 요일들
    days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']    # 요일 리스트

    starting_days_in_a = starting_days[a - 1]       # a월의 시작하는 요일 찾기
    # print(starting_days_in_a)
    start_index = days.index(starting_days_in_a)    # a월의 시작하는 요일이 days에서는 몇번째 인덱스인지 찾기
    # print(start_index)
    if((start_index + (b % 7 - 1)) >= 7):                   # b일의 요일 리스트 속 인덱스를 찾는데 만약 7보다 크다면 (인덱스 범위를 벗어난다면)
        answer = days[(start_index + (b % 7 - 1)) - 7]      # 7을 빼준다
    else:
        answer = days[start_index + (b % 7 - 1)]

    return answer

if __name__ == '__main__':
    print(solution(4, 4))       # MON
    print(solution(4, 1))       # FRI
    print(solution(6, 13))      # MON

print(4 % 7)

풀이

  • 어찌보면 조금 무식하게 각 월의 시작하는 요일을 저장해둔 리스트를 통해 요일만을 찾아내는 코드를 짰다. (무작정 빨리 짜보려고 하다보니 . . .)
  • 개선하고 싶은 방향 :
    • 1/1이 금요일 시작이니까 금요일을 인덱스 1에 두고 나열하여 b에 들어오는 일 수를 토대로 찾아내도록 해야할 것 같다.

코드 개선

그래서 개선한 코드

def solution(a, b):
    answer = ''

    day = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED']     # 1/1이 FRI부터 시작했으니 인덱스 1이 FRI인 요일 순서의 리스트
    month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]    # 각 월이 가지고 있는 총 일 수를 담은 리스트

    total_days = sum(month[:a - 1], b)      # a월 b일 의 총 일 수
    answer += day[total_days % 7]           # 이 총 일 수를 기반으로 일주일 7일을 기반으로 반복되는 요일이니까 7로 나눴을 때의 나머지를 통해 요일을 찾는다.

    return answer
  • a월 b일 이 가지고 있는 총 일 수를 구한 뒤, 총 일 수를 통해 요일을 찾을 수 있다.
  • 일주일 7일을 기반으로 반복되는 요일 리스트 day의 인덱스를 기반으로 7로 나눴을 때의 나머지를 통해 a월 b일의 요일을 찾는다.

What I learned

datetime을 사용하는 방법도 있었다.

import datetime

def getDayName(a,b):
    t = 'MON TUE WED THU FRI SAT SUN'.split()
    return t[datetime.datetime(2016, a, b).weekday()]

#아래 코드는 테스트를 위한 출력 코드입니다.
print(getDayName(5,24))
profile
데굴데굴 뚝딱뚝딱 개발기록

0개의 댓글