Q.

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

5 24 "TUE"

 

 

 

def solution(a, b):
    day = ['FRI','SAT','SUN','MON','TUE','WED','THU']
    month = [31,29,31,30,31,30,31,31,30,31,30,31]
    total = []
    cnt,date = 0,0
    
    for i in range(0,12):
        cnt=sum(month[0:i])
        total.append(cnt)
        
    if a == 1:
        date = b
    else:
        date = total[a-1] + b
        
    i = date%7
    answer = day[i-1]
    return answer

왠지 이 문제에서 핵심은 a월b일을 수로 바꿨을때 몇일이 되냐였던 것 같다.

달마다 요일이 달랐고 if문을 12번 쓸수는 없어서 우선 리스트를 이용해서 월들의 누적합을 구하고싶었다.

 

for문을 이용해서 누적합을 total리스트에 추가했다. 그리고 그 누적합에 b일도 더해서 총 일수를 구했다.

요일은 7개가 반복되니까 일수를 7로 나눈 나머지를 idx로 day리스트에서 찾게끔 했다.

 

처음에는 문제보고 좀 막막할 줄 알았는데 제한시간보다 더 일찍풀려서 당황쓰;

 

def solution(a, b):
    day = ['THU','FRI','SAT','SUN','MON','TUE','WED']
    month = [0,31,29,31,30,31,30,31,31,30,31,30,31]
 
    return day[(sum(month[0:a]) + b)%7]

 

대단하신 분의 팁으로 변수들을 줄이고 효율성을 살려 3줄로 풀이를 끝냈다..

와...대박....신기..재밌다..와..

 

day의 인덱스와 일수의 합을 7로 나누었을 때의 나머지를 같게 하려고 day 리스트에서 THU를 가장 먼저 넣었다.

누적합에 + b일만 추가하면 되기 때문에 변수로 잡았던 cnt도 없앴고 return에 바로 원하는 값을 집어넣었다.

 

 

 

다음 공부할 함수

zip()

'Algorithm' 카테고리의 다른 글

programmers #체육복(정답아님)  (0) 2021.08.07
programmers #예산  (0) 2021.08.07
programmers #완주하지 못한 선수  (0) 2021.08.05
programmers #모의고사  (0) 2021.07.29
programmers #K번째수  (0) 2021.07.22

+ Recent posts