Beginner
2024-04-12

2016년

두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요.

#99일지#99클럽#TIL#개발자스터디#코딩테스트#항해
직접 풀러가기

문제 설명

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"

풀이

  1. 월별 마지막 날짜를 배열(days )로 선언하고, 요일별 배열( week )을 선언한다.
  2. a-1까지 반복문을 수행하고, b와 합쳐서 총 몇 일인지를 구한다.
  3. 구한 날짜 수를 7로 나눈 나머지로 인덱스를 구하고 요일 배열에서 해당 인덱스의 값을 리턴한다.

JavaScript

function solution(a, b) {
    var answer = '';
    let days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 
    let week = [ "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED" ]; 
    let dayCount = 0;
    for (let i = 0; i< a-1; i++){
        dayCount += days[i]
    }
    dayCount = dayCount + b;
    result = dayCount % 7;   
	  answer = week[result];  
    return answer;
}
  • days 배열은 각 월별 일수를 나타내며, 2016년은 윤년이므로 2월은 29일까지!
  • week 배열은 요일을 나타냄
  • dayCount 변수를 사용하여 1월 1일부터 입력 받은 날짜까지의 총 일수 계산
  • ab일의 총 일수를 7로 나눈 나머지를 사용하여 해당 요일을 week 배열에서 찾아 반환

Python

동일한 함수를 python으로 작성하면 아래와 같다.

def solution(a, b):
    days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]
    day_count = sum(days[:a-1]) + b
    result = day_count % 7
    answer = week[result]
    return answer

※ Python의 datetime 모듈을 사용하면 날짜와 요일을 계산하는 보다 직관적이고 간결한 코드로 작성할 수 있다. 이 방법을 사용하면 윤년 계산과 같은 복잡한 부분을 자동으로 처리할 수 있다.

import datetime

def solution(a, b):
    date = datetime.date(2020, a, b)
    return date.strftime("%a").upper()
  • strftime("%a") 메소드를 사용하여 해당 날짜의 요일을 3글자로 축약된 형태로 반환한다 (예: Thu, Fri 등).
  • .upper()를 호출하여 결과를 대문자로 변환합니다, 요일을 전체 대문자로 출력하기 위해 사용한다.