[Py_Lv1] 2016

Sunghun📈·2021년 10월 18일
0

프로그래머스

목록 보기
74/93
post-thumbnail

문제 설명

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

입출력 예시

접근법

풀이 방식은 2가지가 있다.

파이썬의 강력한 라이브러리를 이용하는 방법이 첫번째이다.

datetime의 weekday를 이용하면 입력된 년도와 월, 일에 맞는 인덱스를
반환해주는데 이를 활용해 days라는 list에 요일만 넣어 놓으면 알맞게
출력할 수 있다.

두번째 방식은 2016년의 모든 월에 일수를 list에 넣어
이를 계산식으로 구하는것이다.

5월 24일을 구하는 경우
슬라이싱을 통해 4월까지 일수를 모두 구해 더한 다음
b의 값을 통해 나머지 일 수를 더해준다. 이때 -1을 진행하는데
이는 7로 나눈 나머지 값을 보면 이해할 수 있다.

-1을 진행하지 않은 경우 반환되는 값이 하루씩 밀린다.

이는 list의 시작 index가 0부터이기 때문이라고 생각한다.

최종적으로 구해진 index값을 days[]에 넣어 답을 구하면 된다.

===========================================================

풀이 1

import datetime

days =["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]

def solution(a, b):
    answer = days[datetime.date(2016, a, b).weekday()]
    return answer

풀이 2

month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
days = ["FRI", "SAT", "SUN","MON", "TUE", "WED", "THU"]

def solution(a, b):
    answer = days[((sum(month[:a-1]) + b-1) % 7)]
    return answer
profile
데이터 분석과 AI 분야의 전문가를 꿈꾸는 청년

0개의 댓글