NIRVANA

[level 1] 2016년 본문

Coding test(Python3)/Programmers

[level 1] 2016년

녜잉 2023. 8. 2. 20:49

문제

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

 

문제 풀이 접근법1

1) 2016년을 기준으로, 숫자를 나누었을 때 나머지가 0이면 목요일, 1이면 금요일, 2면 토요일, 3이면 일요일, 4면 월요일, 5면 화요일, 6이면 수요일이므로 {0:'THU', 1:'FRI', 2:'SAT', 3:'SUN', 4:'MON', 5:'TUE', 6:'WED'}인 딕셔너리를 만든다 

2) a-1번 만큼 반복하면서 i+1이 2이면 29를 더하고, 4, 6, 9, 11이면 30을, 나머지이면 31을 더한다.

3) b를 더하여 a월 b일이 1월1일로부터 얼마나 지난 날인지를 구한다.

4) days와 7을 나눈 나머지를 구한 뒤, 해당 숫자(=key)에 해당하는 value값을 반환한다.

def solution(a, b):
    days = 0

    week = {
    0:'THU', 1:'FRI', 2:'SAT', 3:'SUN', 4:'MON', 5:'TUE', 6:'WED'
    }

    for i in range(a-1):
    
        if i+1 == 2:
            days += 29
        elif i+1 == 4 or i+1 == 6 or i+1 == 9 or i+1 == 11:
            days += 30
        else:
            days += 31
        
        
    days += b
 
    days = days % 7

    return week[days]

 

 


다른 분들 풀이

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

#아래 코드는 테스트를 위한 출력 코드입니다.
print(getDayName(5,24))

배열 슬라이싱으로과 sum()함수를 사용해서 a-1달까지의 일수와 b 일수를 더한 수와 7을 나눈 나머지가 리스트의 첨자값이 되게 한 점이 인상 깊었다.

나는 그냥 b를 다 더해서 아예 딕셔너리를 새로 정의했는데 이분은 b-1을 더하여서 fri부터 0이 시작되게 하신 것 같다. 

 

 

'Coding test(Python3) > Programmers' 카테고리의 다른 글

[level 1] 카드 뭉치  (0) 2023.08.04
[level 1] 폰켓몬  (0) 2023.08.02
[level 1] 명예의 전당(1) (나중에 꼭 다시 풀어보기..)  (0) 2023.08.02
[level 1] 추억 점수  (0) 2023.08.02
[level 1] 콜라 문제  (0) 2023.07.31