본문 바로가기
Python/코딩테스트

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

by @sseyeon_ 2020. 12. 19.
반응형

 

이번 문제는 윤년의 요일 구하기 !

 

월, 일을 입력받아 2016년 ㅁ월 ㅁ일은 무슨 요일인지 구하는 문제이다.

 

1. 우선 디데이 구하듯 날짜를 다 더하고,

2. 일주일로 나눈 나머지 값을 활용해 

 

최종 요일을 구할 것이다. 

 

 

처음엔 이중 for문을 생각했지만 ,, 

저번에 효율성에서 0점 맞은 기억에 

for문을 두번 쓰면 시간 복잡도는 n^2이니까 ....... 시간이 오래 걸리면 또 빵점을 주지 않을까?

하며 안썼는데 

 

아무리 생각해도 내 머리에선 for문 밖에 생각이 안나 결국 for문을 썼다 !

 

[ 1차 시도 - 실패코드 ] 

def solution(a, b):

    dic = {0:'SUN', 1:'MON', 2:'TUE', 3:'WED', 4:'THU', 5:'FRI', 6:'SAT'}

    if a == 1:
        result += b
    elif a == 2:
        result = 31 + b   
    else:
        result = 31 + 29
        a -= 2
        q = int(a/2)
        r = a%2
        
        result += q * 31
        result += r * 30
        
    return dic.get(result%7)
    

이렇게 하면 테스트인 5월 24일은 잘 리턴 했지만,

뭐가 문제인지 다른 모든 테스트 케이스는 실패하였다.

 

 

[ 2차 시도 - 실패코드 ] 

def solution(a, b):
    result = 0
    dic = {3:'SUN', 4:'MON', 5:'TUE', 6:'WED', 0:'THU', 1:'FRI', 2:'SAT'}

    if a != 1:
        for i in range(1, a, 2):
            result += 31
            for j in range(i+1, a, 2):
                if j == 2:
                    result += 29
                else: 
                    result += 30
                break
    result += b
    print(result)
    return dic.get(result%7)

 

 

 

흠 꽤나 자신 있던 코드였는데 뭐가 틀린걸까아 ,, 

 

 

[ 성공코드 ] 

def solution(a, b):
    result = 0
    dic = {3:'SUN', 4:'MON', 5:'TUE', 6:'WED', 0:'THU', 1:'FRI', 2:'SAT'}

	# 달 계산 (1월은 제외)
    if a != 1:
        for i in range(1, a, 2):
            if i < 8: 					# 1,3,5,7월은 31일
                result += 31
            else: 					# 9,11월은 30일
                result += 30
            for j in range(i+1, a, 2):
                if j == 2:				# 2월은 29일
                    result += 29
                elif j < 8:				# 4,6월은 30일
                    result += 30
                else: 					# 8, 10, 12월은 31일
                    result += 31
                break
    result += b						# 일 계산

    return dic.get(result%7)

 

7, 8 월이 31일인걸 까먹어찌모야 ㅎㅎ 

 

무튼 ,,, 성공 >,,<

 

 

다른 사람 풀이 보니 웃겼던 것도 있고 for를 하나만 쓴 분도 있었다 !! 

코드 리뷰 해봐야디 

 

반응형