본문 바로가기
Algorithm/Programmers

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

by 홍월이_ 2023. 1. 9.

시작하며...

모든 알고리즘 문제 풀이는 제가 직접 짜서 정답을 맞춘 결과만을 공유합니다.

마지막 'More Solution'은 다른 정답자들 풀이 중 생각지 못했던 부분들이나 좋게 느껴진 풀이법 몇개를 가져와서 공유하였습니다.

 

[Level 1] 2016년

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

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

입출력 예

 

My Solution

def solution(a, b):
    month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    day = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
    if a == 1:
        days = b
    else:
        days = sum(month_days[:a-1]) + b
    idx_day = days % 7 - 1
    return day[idx_day]

 

  • 일년 열두달의 일수를 담은 배열 month_days와 요일을 담은 day 변수를 생성해준다. 1월1일이 금요일이라고 하였으므로 FRI를 첫번째로 하고 순서대로 입력한다.
  • 현재 월, 일이 매개변수 a와 b로 주어지므로 현재까지 경과한 일 수 days를 계산해준다.
  • a가 1이라면 1월이므로 days는 b가 된다.
  • 1월이 아니라면 month_days에서 현재 월의 전월까지 더해준 뒤(예 : 5월이라면 4월까지 전체 합) 현재 월의 흐른 일수 b를 더해주면 총 경과한 일수를 구할수있다. : sum(month_days[:a-1] + b
  • 이제 day 배열에서 현재 요일이 무슨 요일인지 계산을 해주면 되는데, 구해진 days 를 7로 나눈 나머지 값을 이용한다.
  • 1월1일인 1이 나오면 -1 을 해서 idx_day가 0이 되기때문에 금요일이 된다. 

댓글