[프로그래머스] 2016년

김서연·2024년 2월 8일

코딩테스트

목록 보기
3/31
post-thumbnail

📜문제 설명

문제 바로가기

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"

📄문제 해결

📝내가 푼 코드

m = {1:0, 2:31, 3:60, 4:91, 5:121, 6:152,
     7:182, 8:213, 9:244, 10:274, 11:305, 12:335}
d = ['THU', 'FRI', 'SAT', 'SUN', 'MON',
     'TUE', 'WED']

def solution(a, b):
    return d[(m[a]+b)%7]

라이브러리를 찾아보기보다 일단 단순하게 2016년의 몇 번째 날인지 구하고 7로 나누려고 생각하니 위와 같이 코드를 작성하게 됐다.

m에 각 월에 대한 value에 b를 더하면 몇 번째 날이 되는지 구하고 7로 나눈 나머지를 d의 인덱스로 탐색하면 요일이 나올 수 있도록 했다.

코드 내에서 계산이 적지만, m을 정의할 때 이미 어느정도 작성자가 계산해서 넣는 바람에 너무 코드를 활용하지 않았다는 생각이 들어 아쉬움이 남는다.

📑다른 사람들의 풀이(1)

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]

내가 작성한 것과 방법이 크게 다르지 않지만 너무 코드를 활용하지 않았다는 아쉬움이 없는 코드라고 생각했다.

코드 내 계산 자체는 많지만, 시간복잡도를 생각하면 크게 문제되지 않아 보이고 나의 코드보다 보기 좋고 깔끔하다는 생각이 들었다.

📑다른 사람들의 풀이(2)

import datetime

def getDayName(a,b):
    t = 'MON TUE WED THU FRI SAT SUN'.split()
    return t[datetime.datetime(2016, a, b).weekday()]

문제에 맞게 시간에 관한 라이브러리인 datetime을 사용한 경우이다. 라이브러리를 사용한 만큼 깔끔하다.

2016년 a월 b일을 datetime으로 정의하고 weekday()를 통해 무슨 요일인지 가져온다. 이때 weekday()는 숫자를 리턴하는데, 0(월요일)부터 6(일요일)을 리턴하기 때문에 인덱싱하기에 좋은 것 같다.

왜 그렇게 했는지는 알 수 없지만 요일을 ' '을 두고 문자열로 정의한 뒤 split()한 것이 인상적이었다. (내가 작성한다면 그냥 리스트에 각 문자열을 넣었을 것 같아서..)


🤔느낀점

가끔은 때에 맞는, 문제에 맞는 문제에서 사용할 수 있는 라이브러리를 활용하는 것도 좋겠다는 생각을 했다.

profile
가보자고! 🔥

0개의 댓글