본문 바로가기
개발/차근차근 개발일지 TIL

TIL 230407 날짜에 따른 요일 반환 진짜 중요한 개념정리★★

by 코딩하는짱구 2023. 4. 7.
반응형

TIL 230407 날짜에 따른 요일 반환 진짜 중요한 개념정리

문제 설명:

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

 

 

 

 

  1. 나의 의도: new date 함수로 쉽게 풀 수 있는 문제였지만, 아래와 같은 원시적 방법으로 정답을 도출하고 싶었다.
  2. 나의 노력: 팀원과 함께 논의하고, 구글링, Chat GPT에 해석을 찾아봄
  3. 문제 진단: week과 leapYear, 그리고 day와의 상관관계가 이해되지 않음, let da = b+4 구문이 이해되지않음, 공식의 성립 이유가 이해되지 않아서 밑의 결과도 왜 도출되는지 모르겠음. 문제 조건에 왜 윤년이 나오는지도 모르겠음..
  4. 팀원과 논의 후 매니저님께 해설을 부탁드리기로 함 

    문제 해결: 우리가 구하고자 하는 날짜는 결국 지금 날짜+경과한 날짜 라는것의 개념을 잡았다. 1월 1일이 기준으로 for 문으로 그 다음달을 더해가는 작업을 통해 구현하는 것이기에, 2월부터는 for 문을 통해 날짜를 더한 값을 일주일, 즉 7로 나누면 된다. 자동적으로 나눈 값의 나머지 값이 요일이 된다.
  5.  
  6. 만약 구하고자 하는 날짜가 1월이라면 for 문의 a-1이라는 제한을 통해 for문이 작동하지 않게 한다. 즉 1월 날짜를 구하고싶다면 단순히 날짜에 경과된 날짜를 더해줘서 값을 구하면 간단하다. 

  7. 팀원과 나 둘 다 '날짜를 세는 개념'을 공식에 '치환'하는 것이 굉장히 난해했지만 끝까지 탐구하였고,
  8. 결국은 매니저님의 도움 없이 우리 스스로 개념을 잡아냈다!
  9.  
function solution(1, 30) {
// 4, 100, 400으로 나누어지는 년도는 윤년이다.
  const week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"];
  const leapYearMonths = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  let day = 30;
  for (let i = 0; i <a-1; i++) {
    day += leapYearMonths[0];
  }
  return week[30%7]; //2==>
} // 1/8일은 금요일 0 1 2 3 4 5 6
console.log(solution(1, 7)); 

// 날짜의 요일 구하는 개념 : 날을 7로 나눴을 때 생기는 나머지로 week의 index에 구함
// week의 index로 요일 출력

// 2월로 변경된 경우 1월의 날짜 수를 더해준 후 7로 나눈다
반응형