JS알고리즘_2016년

돌리의 하루·2023년 9월 26일
0

문제 설명

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 return하는 함수, 솔루션을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT

입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.

제한 조건

  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

해결방법

사실 이 문제는 JS에서 지원하는 Date 클래스가 있는데, 이용하면 아~주 쉽게 풀 수 있다!

new Date()와 같은 형식으로 되어있는데, 당장 개발자 도구에 찍어봐도 잘 나온다.

문제에서 원하는건 윤년인 2016년에서 월 a , 일 b를 제공할 때 어떤 요일인지 알아내는 것이라, 사실 이 클래스를 쓰면 너무나 쉽게 알아낼 수 있다. =_=+

문제에서 원하는 답대로 하려면, 아마 아래와 같이 될 것이다.

function solution(a,b) {
  //a-1이라고 하는 이유는, js는 시작이 0월 기준이기 때문이다.
return new Date(2016,a-1,b).toString().slice(0,3).toUpperCase()
}

하지만....알고리즘 문제를 풀기로 한 이상, 클래스의 도움을 받긴 싫었다,, 그래서 윤년인 2016의 월마다의 요일이 적혀있는 배열을 만들고, 또한 요일이 적혀있는 배열을 만들었다.

그리고 1월1일이 금요일이라는 문제에 기반해서, 시작하는 index의 값이 fri가 되게 처음 시작하는 dayPlus의 기준에 4를 더했다.

그리고, for문으로 한달 기준의 날짜가 들어있는 mon 배열을 돌리면서 dayPlus의 전체 일수를 계산후,

return값에 해당하는 요일을 알기위해 %7을 계산한 값을 mon의 인덱스 값에 넣는다!

function solution(a, b) {
   let today = ["SUN","MON","TUE","WED","THU","FRI","SAT"]
   let mon = [31,29,31,30,31,30,31,31,30,31,30,31]
   let dayPlus = b+4
   for(let i = 0 ; i < a-1; i++){
       dayPlus += mon[i]
   }
    return today[dayPlus%7]
}

끄읏 ^__^!

++9/29 이 글이 갑자기 비공개가 되어있어서 뭐지?? 싶어하다가 벨로그 비공개로 구글링 해보니 특정 키워드가 있으면 비공개로 자동필터되는거같다. 나는 이글에서 여러 키워드를 바꾸면서 실험해보았는데, return <- 한글로 발음한 부분이었다. 영어로 return이라고 쓰니 해결되었다!

profile
진화중인 돌리입니다 :>

0개의 댓글