본문 바로가기
알고리즘/프로그래머스 PS

[프로그래머스][Level 1][Python] 2016년

by 빛밤하늘 2021. 7. 24.
반응형

밑의 링크는 프로그래머스에서의 문제 링크입니다.

 

코딩테스트 연습 - 2016년

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까

programmers.co.kr

 

 

 

 

 

 

 

 

생각한 풀이 과정

  1. 2016년 1월 1일은 금요일부터 시작하므로 금요일부터 시작해서 목요일로 끝나는 튜플 변수를 하나 만들어줍니다.
  2. 1월부터 12월까지 각 월마다의 일수를 저장하는 튜플 변수를 하나 만들어줍니다.
  3. 2016년 1월 1일부터 2016년 a월 b일까지의 총 일수를 계산합니다.
  4. 총 일수를 7로 나누고 나온 나머지를 구합니다.
  5. 4번 과정에서 나온 나머지를 1번 과정에서 만든 요일 튜플의 인덱스로 사용해 2016년 a월 b일의 요일을 구합니다.

 

 

 

주의해야 할 

문제에서 2016년 1월 1일은 금요일이라는 점을 주의해야합니다. 

문제를 대충 읽고 그냥 일요일이나 월요일부터 시작하는 코드를 짠다면 틀리게 나옵니다.

 

1월부터 12월까지의 각 달마다 며칠까지 있는지 알아야 풀기 쉬울 것입니다.

 

주먹으로 월별마다 일수 세는 법

 

문제의 제한 조건에서 말해주듯이 2016년은 윤년입니다.

3월 이후의 요일을 구할 때, 2월이 29일까지 있다는 윤년을 고려하지 않으면 틀린 값이 나올 것입니다.

 

 

 

 

 

 

 

 

제출한 파이썬 코드

# 2016년 a월 b일을 뜻하는 두 수 a, b가 매개변수로 주어집니다.
def solution(a, b):
    # 요일을 저장한 튜플 변수를 선언합니다.
    # 2016년 1월 1일은 금요일이므로 금요일부터 시작하는 튜플로 만들어줍니다.
    day_of_week = ('FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU')
    # 각 달마다의 일수를 저장하는 튜플 변수를 선언합니다.
    # 2016년은 윤년이므로 2월의 일수는 28일이 아닌 29일입니다.
    month_days = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    # 2016년 1월 1일부터 2016년 a월 b일까지의 총 일수를 저장하는 변수를 선언합니다.
    # a월 이전까지의 각 달별 일수를 모두 더하고 b일을 또 더하고 1을 빼줍니다.
    days = sum(month_days[:a - 1]) + b - 1
    # 2016년 a월 b일의 요일을 저장하는 변수를 선언합니다.
    # 총 일수를 7로 나눈 나머지를 day_of_week의 인덱스로 사용해서 요일을 저장하면 됩니다.
    answer = day_of_week[days % 7]

    # 2016년 a월 b일의 요일을 반환합니다.
    return answer

 

 

 

제출 결과

결과

 

 

 

 

 

 

 

 

느낀 점

처음에는 어떻게 접근해야할지 떠오르지 않아서 날짜와 관련된 모듈을 사용해야 싶었습니다.

계속 고민해보니 문득 해결 방법이 떠올라 위와 같이 코드를 짤 수 있게 되었습니다.

 

그런데, 만약 실무에서나 개인적인 개발을 할 때 날짜와 관련된 문제에 부딪힌다면

위와 같은 알고리즘적인 접근보다는 더 정확하게 만들기 위해 날짜와 관련된 모듈을 사용할 것 같습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글