본문 바로가기

코딩일기

알고리즘 코드카타 54 - 2016년 (복습)

https://school.programmers.co.kr/learn/courses/30/lessons/12901

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명
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일같은 날짜는 주어지지 않습니다)

 

이전에 풀었던 문제의 두번째 복습, 이전에는 datetime라이브러리를 사용했지만 이번에는 사용하지 않고 해결해보려고 한다.

def solution(a, b):
    days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
    
    return days

 

가장 먼저 요일에 대한 값을 출력하기 위해서 요일 리스트를 만들어주었다.

 

def solution(a, b):
    days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
    month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    date = 0
    
    return days

 

다음으로는 월별 날짜의 일수를 리스트로 만들었다.

 

def solution(a, b):
    days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
    month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    date = 0
    
    for i in range(a-1):
        date += month[i]
    
    date += b+3
    
    return days

 

그리고 주어진 날짜의 일수를 계산해주었다. 3을 더한 이유는 시작 날짜와 리스트를 일치시켜주기 위함이다.

 

def solution(a, b):
    days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
    month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    date = 0
    
    for i in range(a-1):
        date += month[i]
    
    date += b+3
    
    return days[date % 7]

 

마지막으로 해당 일수를 7(요일의 수)로 나눈 나머지와 요일 리스트에 일치하는 값을 출력하면 된다.

시간은 더 빠르다???

 

좋은 코드는 당연히 아니지만 라이브러리를 사용하지 않는다면 이렇게도 풀 수 있다 정도로만 알아두면 될것같다.

 

 

import datetime

def solution(a, b):
    days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
    
    date = datetime.date(2016, a, b)
    
    w_n = date.weekday()
    
    answer = days[w_n]
    
    return answer

이전 테스트