티스토리 뷰
코딩테스트 연습 - 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리스트에서 정답 출력.
생각보다 이렇게 푼 풀이가 별로 없었다. (내가 찾아보기로는?)
모든 월별로 조건문을 만드는것이 귀찮고, 리스트도 길게길게 만들기 귀찮아서 코드를 어떻게 줄여볼까 궁리하다가 나온 코드ㅋㅋㅋ 뭔가 만족스럽다. 다른 재미있는 코드들이 있다면 공유!
'알고리즘 이야기 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 스킬 체크 - 레벨1 클리어 (0) | 2020.02.12 |
---|
- Total
- Today
- Yesterday
- DevOps
- 프로그래머스
- 기계식 키보드
- SW마에스트로
- 네트워크
- 오픈소스기여
- 노개북
- 개발자밋업
- boj
- 타입스크립트
- ssi-at
- 노마드코더
- 파이썬
- 알고리즘
- 개발자
- 개발자북클럽
- python
- 합격
- 프론트엔드
- 코딩테스트
- github
- 대전
- python3.8
- IT대외활동
- 클린코드
- 백준
- 후기
- devcon
- 회고
- 오픈소스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |