코린이의 공부일기

[ Python]프로그래머스 LEVEL1 > 2016년 본문

STUDY/[Python] Coding Test

[ Python]프로그래머스 LEVEL1 > 2016년

SOJUNG 2021. 1. 28. 21:13

안녕하세요! 오늘은 프로그래머스 레벨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일같은 날짜는 주어지지 않습니다)
abresult
524"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번째 풀이를 비교하며 어떻게 간결해졌는지 한번 찾아보세요 !!ㅎㅎ

오늘도 글 읽어주셔서 감사합니다!ㅎㅎ

잘못된 점 지적은 환영합니다 ♡

Comments