📝 문제
> 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"를 반환하세요.
https://programmers.co.kr/learn/courses/30/lessons/12901
코딩테스트 연습 - 2016년
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까
programmers.co.kr
- 지구가 태양을 한 바퀴 도는데 정확히 365.2422일이 걸린다. 우리는 1년을 365일으로 계산하고 있기 때문에 오차가 생긴다. 그 오차는 시간이 많이 흐를수록 더 커질 것이다. 그래서 그 오차가 난 것을 맞춰주기 위해 4로 나누어지는 해의 2월에 하루를 더 추가해준다. 여기서 4로 나누어지는 해를 윤년이라고 한다.
- 우리에게 중요한 것은 2016년 2월은 28일이 아닌 29일이라는 점이다. 윤년을 정확히 모르더라도 이거만 알고가면 된다!
🎨 풀이
💡 첫번째 시도 = 성공
def solution(a, b):
mon = [3,1,3,2,3,2,3,3,2,3,2,3]
day = ['FRI','SAT','SUN','MON','TUE','WED','THU']
for i in range(0,a-1):
b += mon[i]
b = b % 7 - 1 # index가 0부터 시작하는 걸 고려해서 -1을 해줌.
return day[b]
>
- mon에 [31,29,31, ...] 이런식으로 쭉 써서 쉽게 풀 수 있는데! 그냥 수를 작게해서도 할 수 있겠구나 싶어서 그렇게 해보았다.
- mon 에 들어있는 수는 [해당 월에 있는 날 % 7] 이다. 1월은 31일까지 있기 때문에 31 % 7 == 3이 된다. % 7을 어짜피 해줄 거라서 미리 살짝만 해줬다고 생각하면 된다.
- day 에 들어있는 건 요일이다. 문제에서 2016년 1월 1일이 금요일이라고 나와있기 때문에 금요일부터 시작해서 쭉 써둔 것이다.
코드 원리
- 우리가 구할 것은 요일이다. 그래서 나누기 7을 해주는 것이다.
- a월 이전의 달에 있는 숫자들 (mon)을 다 더해서 b에 넣어준다. 예를 들면, 만약 a가 3이면 1월, 2월에 해당하는 값들 (3과 1)을 b에 넣어주는 것이다. 이 동작은 사실 31 + 29를 더한 후 나중에 % 7 해주는 것과 같다.
- 그 후, b % 7 - 1한 값을 b에 넣어준다. -1을 해주는 이유는 인덱스가 0부터 시작하기 때문이다.
(b = 2일 경우에는 금요일에서 2만큼 차이가 나서 일요일이 정답인데, -1을 해주지 않으면 day[2]이 되어서 월요일로 출력된다)
- b를 인덱스로해서 day[b]를 출력한다.

끝~
⭐ 느낀점
> 오늘은 좀 왜 그런지 모르겠는데 설명이 어려웠다. 내가 이해를 제대로 못하고 있었나??? 열심히 설명한다고 해봤는데, 다른 사람이 본다면 이 글을 이해할 수 있을 지는 잘 모르겠다.ㅠㅠ 중간에 대충 쓰고 싶어졌지만 이런 상황을 회피한다고 해서 또 이런 상황이 안오는 것은 아닐 것이기에 일단 부딪쳐보았다. 끝까지 포기안하고 설명한 건 잘했다고 생각하는데 좀 설명이나 설득력을 높일 필요는 있어보인다. 힘내보자!
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 1] [1차] 비밀지도 (파이썬) (0) | 2022.04.15 |
---|---|
[프로그래머스 / Level 1] 부족한 금액 계산하기 (파이썬) (0) | 2022.04.13 |
[프로그래머스 / Level 1] 두 개 뽑아서 더하기 (파이썬) (0) | 2022.04.11 |
[프로그래머스 / Level 1] 예산 (파이썬) (0) | 2022.04.10 |
[프로그래머스 / Level 1] 3진법 뒤집기 (파이썬) (0) | 2022.04.09 |