프론트엔드✏️/코드캠프

알고리즘 - 달력 문제, reduce, Date()

당근먹는하니 2022. 6. 7. 18:09
728x90
반응형

 

2016년 1월 1일 : 금요일

 

+0 : 1월 1일 (+0)

+1 : 1월 2일 (+1) 토요일 

+2 : 1월 3일 (+2) 일요일

...

+7 : 1월 8일 (+0) 금요일

 

몇 개의 요일이 지났는지 확인

 

month : 1월 31, 2월 29, 3월 31, ... 며칠있는지 다 적어놓기

days += month[i]

밸류값만 뽑아서 저장!

 

 

const month = {
  1: 31,
  2: 29,
  3: 31,
  4: 30,
  5: 31,
  6: 30,
  7: 31,
  8: 31,
  9: 30,
  10: 31,
  11: 30,
  12: 31
}

const day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
function solution(a, b) {
  let days = 0;
  for(let i = 1; i<a; i++) {
    days += month[i]; // 하루를 뺀 값!(당일 제외)
  }
  days += (b-1);
  console.log(days % 7, days)
  console.log(day[days%7])
}

solution(5, 24); // TUE

 

# reduce 이용

const month = {
  1: 31,
  2: 29,
  3: 31,
  4: 30,
  5: 31,
  6: 30,
  7: 31,
  8: 31,
  9: 30,
  10: 31,
  11: 30,
  12: 31
}

const day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
function solution(a, b) {
const days= new Array(a)
								.fill(1)
								.reduce((acc,cur,i) => {
                  const mn = cur + i;
                  return acc + ( mn !== a
                  		? month[mn] // a월 이전의 월일 경우 통째로 일수를 더해준다. 
                    	: b - 1
                  )
                })
	return day[days%7];
}

solution(5, 24);

 

Date()  -> string

new Date()  -> object 

 

new Date ( 2016, 5, 24 ) -> 2016년 6월 24일의 데이터를 가져옴

 

728x90
반응형