2016년 : level1_파이썬

문제

https://programmers.co.kr/learn/courses/30/lessons/12901

내가 푼 풀이

def solution(a, b):
    month = a
    day = b
    day_hap = 0
    
    calendar = {
        1: 31,
        2: 29,
        3: 31,
        4: 30,
        5: 31,
        6: 30,
        7: 31,
        8: 31,
        9: 30,
        10: 31,
        11: 30,
        12: 31
    }
    
    day_of_the_week = {
        0: "FRI",
        1: "SAT",
        2: "SUN",
        3: "MON",
        4: "TUE",
        5: "WED",
        6: "THU"
    }
    
    if month == 1:
        if day % 7 == 0:
            day = 6
        else:
            day = day % 7 - 1
        return day_of_the_week[day]
    else:
        for i in range(1,month):
            day_hap += calendar[i]
        day_hap += day
        if day_hap % 7 == 0:
            day_hap = 6
        else:
            day_hap = day_hap % 7 - 1
        return day_of_the_week[day_hap]

✔ 처음에는 day_of_the_week의 인덱스를 1~7로 줬다.그랬더니 테스트케이스 9, 13번에서 오류가 떴다. 나머지가 0일 때를 고려해주지 않아서 오류가 뜬 것이었다..ㅋㅋㅋㅋ바본가..!!
그래서 0~7로 바꾸어줬더니 이번엔 테이스케이스 1, 2번에서 오류가 발생했다. 테이스케이스를 이것 저것 추가해보다가 1월에서는 day로 해줘야하는데 day_hap으로 계산해서 발생한 문제였다. else문에서 복붙했더니..😂
그렇게 잘 짠 코드는 아닌 것 같다..ㅠ어떻게 하면 더 효율적으로 코드를 짤 수 있는지 더 공부해야겠다..

좋아요가 가장 많았던 풀이

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

후후 나는 45줄에 걸쳐서 작성했는데...😭
기본적으로 풀이방식은 비슷하다!!
나도 굳이 day_of_week를 dictionary로 작성할 필요없이 배열로 했어도 됐겠다라는 생각이 들었고, 나는 굳이 1월일 경우를 조건문으로 구분해줬는데 months[:a-1]로 했으면 조건문을 안써도 된다는 사실을 알았다...이 생각을 왜 못했을까..!
그리고 나머지에서 1을 빼는 게 아니라 day에서 1을 빼주고 나머지를 구하면 조건문을 안써도 됐었다는게,,!!후,,열심히 하자,,

좋은 웹페이지 즐겨찾기