반응형
이번 문제는 윤년의 요일 구하기 !
월, 일을 입력받아 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를 하나만 쓴 분도 있었다 !!
코드 리뷰 해봐야디
반응형
'Python > 코딩테스트' 카테고리의 다른 글
[Python] 프로그래머스 - 문자열 내림차순으로 배치하기 (0) | 2020.12.19 |
---|---|
[Python] 프로그래머스 - 수박수박수박수? (0) | 2020.12.19 |
[Python] 프로그래머스 - K번째 수 (0) | 2020.12.19 |
[Python] 프로그래머스 - 완주하지 못한 선수 (0) | 2020.12.19 |
[Python] 프로그래머스 - 두 개 뽑아서 더하기 (0) | 2020.12.16 |