-
[프로그래머스] 2016년 (Python)코딩테스트 2021. 3. 27. 01:18
시도 1
def solution(a, b): answer = '' month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] days = ["SUN","MON","TUE","WED","THU","FRI","SAT"] start_days = ["FRI", "MON", "TUE", "FRI", "SUN", "WED", "FRI", "MON", "THU", "SAT", "TUE", "THU"] n = b % 7 start_day = days.index(start_days[a - 1]) index = start_day + (n - 1) if index >= 7: index = index - 7 answer = days[index] return answer
단순 캘린더를 보고 한달의 마지막 요일에 다음달의 첫 번째 요일이 연달아 이어지는 것만 보고 각 달의 첫 번째 요일을 그냥 다 구해버렸고, 그걸 리스트로 만들어서 해당 요일을 구했다.
테스트 케이스는 다 통과했지만, 아무리 생각해도 각 월의 해당 요일을 일일이 구하는 것이 수고스러워보여서(더 생각하지 못하고) 각 월의 첫날의 요일을 구하는 과정을 코드로 짰다.
시도 2
def solution(a, b): answer = '' month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] days = ["SUN","MON","TUE","WED","THU","FRI","SAT"] start_days = ["FRI"] for i in range(a): month_start_day = days.index(start_days[-1]) if month[i] == 31: plus_day = 3 elif month[i] == 30: plus_day = 2 else: plus_day = 1 month_index = month_start_day + plus_day if month_index >= 7: month_index = month_index - 7 start_days.append(days[month_index]) # 31이면 3번 째 요일, 30이면 2번째 후, 29면 1번째 후 요일에 끝남 n = b % 7 start_day = days.index(start_days[a - 1]) index = start_day + (n - 1) if index >= 7: index = index - 7 answer = days[index] return answer
이것도 테스트케이스는 통과했으나... 역시 복잡하고 이상했다.
다른 사람들이 풀이한 것을 보고 나서 다시 달력을 보니 생각해보면 그냥 해당 년의 1월의 첫 요일만 알면 해결된다.
시도 3 (최종)
def solution(a, b): answer = '' month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] days = ["SUN","MON","TUE","WED","THU","FRI","SAT"] if a > 1: for i in range(a - 1): b += month[i] n = b % 7 start_day = 5 index = start_day + (n - 1) answer = days[index % 7] return answer
원하는 달의 전 달(1월 제외)의 일수를 전부 더한 값에 b를 더한 후 7로 나눈 후 나머지로 요일을 알 수 있으니 말이다.
테트리스처럼 각 월의 마지막 요일은 다음 달의 첫 요일과 이어진다는 사실을 다시 생각해보면 윗줄과 같은 결과를 알 수 있었다.
index가 7을 넘어가면 7을 뺐던 코드도 %로 수정했다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기 (Python) (0) 2021.03.27 [프로그래머스] 같은 숫자는 싫어 (Python) (0) 2021.03.25 [프로그래머스] 평균 구하기 (Python) (0) 2021.03.25 [프로그래머스] 문자열 내 p와 y의 개수 (Python) (0) 2021.03.25 [프로그래머스] 1878 - 나머지 한 점(Python) (0) 2021.03.06