티스토리 뷰

Python3로 해결!

 

코딩테스트 연습 - 2016년 | 프로그래머스

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일은 실제로 있는 날입니다.

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

입출력 예

a b result
5 24 TUE

간단한 문제 이지만 크게 두가지로 분류되는 정답 코드들, 하나는 내장함수 하나는 노가다 조건문.

나는 뭔가 다른 방식의 풀이를 해보고 싶었다. 내장 합수를 사용하지 않고 작성하는 조금 더 수학적인 풀이.

def solution(a, b):
    days = [31, 30]
    week = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED']
    day = b
    for m in range(a-1):
        if m == 1:
            day += 29
        elif m < 7:
            day += days[m%2]
        elif m >= 7:
            if m%2 == 0:
                day += days[1]
            else:
                day += days[0]
    return week[day%7]

과다한 조건문 보다는 간결하게, 입력되는 월이 8월 보다 큰지 작은지를 따져준다. 그리고 8월 보다 작으면 홀수인경우 31일 추가, 짝수인 경우 30일 추가를 해주고, 8월 보다 크면 홀수인 경우 30일 추가 짝수인경우 31일을 추가해주었다. 2월은 예외적으로 따로 빼서 미리 29일을 더해준다. 그리고 마무리는 어떤 다른 코드들과 비슷하게 7로 나누어준 나머지의 index를 얻어 week리스트에서 정답 출력.

 

생각보다 이렇게 푼 풀이가 별로 없었다. (내가 찾아보기로는?)

 

모든 월별로 조건문을 만드는것이 귀찮고, 리스트도 길게길게 만들기 귀찮아서 코드를 어떻게 줄여볼까 궁리하다가 나온 코드ㅋㅋㅋ 뭔가 만족스럽다. 다른 재미있는 코드들이 있다면 공유!

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함