프로그래머스 - 2016년

김대일·2021년 5월 25일

2016년에 월 일 이 주어지면 해당 날짜의 요일을 출력하는 문제이다.
처음에는 반복문을 이용해서 시도 하려 했지만 잠시후 그건 아주 멍청한 짓이라는걸 깨달았다. 전에 파이썬을 사용해보면서 datetime 이라는 날짜와 시간을 다루는 라이브러리가 있다는걸 떠올렸었다. 하지만 알고리즘 문제 푸는데 라이브러리를 사용하기엔 좀 그렇지 않은가.. 라는 생각이 들어 직접 생각을 해보았다.

내가 작성한 코드는 이렇다. ( 정확히는 구글의 도움을 좀 받았다 )

def solution(a,b):

  days = ["THU","FRI","SAT","SUN","MON","TUE","WED"]
  date = [31,29,31,30,31,30,31,31,30,31,30,31]

    
  return days[(sum(date[:a-1]) + b) % 7]
  

처음에는 days 를 단순히 ' 일 월 화 수 목 금 토 ' 의 순서로 배치했었다.
그렇게 했더니 원하는 대로 날짜가 나와주지 않았고 결국 이 부분은 구글링을 해서 해결했다.

2016년 1월 1일은 금요일이니 list의 시작을 목요일부터 시작시키면 되는것이였다..

그리고 date 에 2016년의 그 달의 마지막날을 넣어주었다.

요즘은 변수에 넣어서 return 하는것보다 바로 return 하는게 깔끔하고 좋아보인다.

days [(sum(date[:a-1]) + b) % 7] 를 통해 해당 월의 전달까지의 달을 모두 더한뒤 그 날짜 ( b ) 도 더하고 나서 % 7을 해주면 원하는 요일의 인덱스를 얻을수 있다

import datetime

def solution(a,b):

	return date(2016,a,b).weekday()  
    # 얼마나 간단하고 좋은가... 

간단하게 라이브러리를 사용하면 참쉽지만 직접 구현하는건 참 복잡하다

머릿속으론 어떻게 해야겠다 떠오르는데 구현하는게 아직은 많이 서투른것 같다...

수학적 머리가 잘 안돌아가서 그런가..

profile
도비코딩

0개의 댓글