[Algorithm Problem] 2016년

7566 단어 algorithmalgorithm

문제


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

코드


  • 반복문
function solution(a, b) {
	let weekDay = ["SUN","MON","TUE","WED","THU","FRI","SAT"];
	let day = b;
	let index = 4;
	
	for (let i = 1; i < a; i++) {
		if (i === 2)
			day += 29;
		else if (i === 4 || i === 6 || i === 9 || i === 11)
			day += 30;
		else
			day += 31;
	}
        index = (index + day % 7) % 7;
	return weekDay[index];
}
테스트 1 〉	통과 (0.07ms, 30.2MB)
테스트 2 〉	통과 (0.05ms, 30.2MB)
테스트 3 〉	통과 (0.06ms, 30.2MB)
테스트 4 〉	통과 (0.07ms, 29.9MB)
테스트 5 〉	통과 (0.05ms, 29.9MB)
테스트 6 〉	통과 (0.05ms, 30.1MB)
테스트 7 〉	통과 (0.07ms, 29.9MB)
테스트 8 〉	통과 (0.07ms, 30.2MB)
테스트 9 〉	통과 (0.06ms, 30.1MB)
테스트 10 〉	통과 (0.06ms, 30MB)
테스트 11 〉	통과 (0.05ms, 30.1MB)
테스트 12 〉	통과 (0.07ms, 30.2MB)
테스트 13 〉	통과 (0.05ms, 30MB)
테스트 14 〉	통과 (0.06ms, 30.2MB)
  • 메소드 호출
function solution(a, b) {
   	let weekDay = ["SUN","MON","TUE","WED","THU","FRI","SAT"];
    let date = new Date(`2016-${a}-${b}`);
    
    return weekDay[date.getDay()];
}
테스트 1 〉	통과 (0.14ms, 30.6MB)
테스트 2 〉	통과 (0.13ms, 30.4MB)
테스트 3 〉	통과 (0.13ms, 30.4MB)
테스트 4 〉	통과 (0.14ms, 30.1MB)
테스트 5 〉	통과 (0.15ms, 30.7MB)
테스트 6 〉	통과 (0.15ms, 30.3MB)
테스트 7 〉	통과 (0.13ms, 30.6MB)
테스트 8 〉	통과 (0.15ms, 30.4MB)
테스트 9 〉	통과 (0.16ms, 30.6MB)
테스트 10 〉	통과 (0.13ms, 30.6MB)
테스트 11 〉	통과 (0.13ms, 30.5MB)
테스트 12 〉	통과 (0.16ms, 30.5MB)
테스트 13 〉	통과 (0.17ms, 30.6MB)
테스트 14 〉	통과 (4.58ms, 30.3MB)

풀이


초기 요일을 12월 31일로 설정하여 받아 온 날짜와 차이를 구한 뒤 % 7 연산자를 통해 요일 인덱스 삽입
혹은
Date 메소드를 사용해 간략화

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

좋은 웹페이지 즐겨찾기