일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 부스트캠프
- 프로그래머스 파이썬
- docker시작하기
- 카카오 파이썬
- 코딩테스트
- 라이브러리란?
- 네이버 부스트캠프
- 부스트캠프AITech
- 양과늑대
- 파이썬 프로그래머스
- 도커오류
- Cannot connect to the Docker daemon at unix
- 도커연결오류
- 프로그래머스 레벨2
- 프로그래머스 레벨3
- 카카오코딩테스트
- 파이썬 카카오코딩테스트
- 프로그래머스 양과늑대
- level1
- 파이썬
- 부스트캠프 회고
- 파이썬 재귀함수
- 파이썬 양과늑대
- 프로그래머스
- 프로그래머스LEVEL1
- 카카오 코딩테스트
- 카카오코테
- 프로그래머스 레벨1
- 프레임워크란?
- 부캠
- Today
- Total
코린이의 공부일기
[ Python]프로그래머스 LEVEL1 > 2016년 본문
안녕하세요! 오늘은 프로그래머스 레벨1중 하나 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일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
a | b | result |
5 | 24 | "TUE" |
1 번째 풀이
1월부터 12월까지 1일이 시작되는 요일이 같은 달(a) 끼리 if-elif으로 나누고 b값을 7로 나눈 나머지 값으로 요일을 정하도록 하였다.
def solution(a, b): if a== 1 or a==4 or a==7: z=["THU","FRI","SAT","SUN","MON","TUE","WED"] answer=z[b%7] elif a==2 or a==8: z=["SUN","MON","TUE","WED","THU","FRI","SAT"] answer=z[b%7] elif a==5: z=["SAT","SUN","MON","TUE","WED","THU","FRI"] answer=z[b%7] elif a==3 or a==11: z=["MON","TUE","WED","THU","FRI","SAT","SUN"] answer=z[b%7] elif a== 6: z=["TUE","WED","THU","FRI","SAT","SUN","MON"] answer=z[b%7] elif a== 9 or a==12: z=["WED","THU","FRI","SAT","SUN","MON","TUE"] answer=z[b%7] elif a== 10: z=["FRI","SAT","SUN","MON","TUE","WED","THU"] answer=z[b%7] return answer
2 번째 풀이
이전 풀이에선 1일 시작이 같은 요일로 나누었다면 1월부터 ~12월 까지 끝나는 일을 리스트로 만들었다.
이 전에는 일일이 나머지 값을 찾아 요일을 찾았다면 두 번째 풀이에선
첫 시작 요일 - 목요일
첫 달 일수 - 31
이 둘이 시작점이 같다는 것과, 요일은 7일마다 계속 반복된다는 점만 처음에 바로 캐치했다면 바로 return 식을 쓸 수 있었다.
그래서 결국
알고싶은 월(a)값 까지의 일 수의합 + 알고싶은 달의 일(b) 을 반복되는 요일의 주기(7)로 나눈 나머지는 요일을 나타내주기 때문에 마지막 return값 처럼 한번에 표현가능했다!
def solution(a,b): months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] days = ['THU','FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED'] return days[(sum(months[:a-1])+b)%7]
여러분도 1번째와 2번째 풀이를 비교하며 어떻게 간결해졌는지 한번 찾아보세요 !!ㅎㅎ
오늘도 글 읽어주셔서 감사합니다!ㅎㅎ
잘못된 점 지적은 환영합니다 ♡
'STUDY > [Python] Coding Test' 카테고리의 다른 글
[Python]프로그래머스 LEVEL1> 이상한 문자 만들기 (1) | 2021.02.01 |
---|---|
[Python]프로그래머스 LEVEL1> 시저암호 (1) | 2021.01.29 |
[Python] 프로그래머스 LEVEL1> 신규 아이디 (1) | 2021.01.28 |
[Python]프로그래머스 LEVEL1> 소수 찾기 (1) | 2021.01.26 |
[Python]프로그래머스 LEVEL1>크레인 인형뽑기 리뷰 (4) | 2021.01.26 |