본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[Programmers] level 1: 2016년 by JavaScript

by codingBear 2022. 7. 8.
728x90
반응형

 이번 글은 다음 글들을 참조하여 작성하였습니다.

 

 

코딩테스트 | (JavaScript) 프로그래머스 : 2016년

날짜 응용 문제

velog.io

 

[프로그래머스 Level 1] 2016년 (자바스크립트)

Description 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터

jaypedia.tistory.com


 이번 문제에 대한 자세한 사항은 다음 링크를 참조하세요.

 

 이번 문제의 경우 Date() 객체를 활용하여 간단히 풀었다. 아무리 생각해도 계산 식은 떠올리지 못했는데 여러 블로그의 포스팅을 참고하여 다른 해답도 공부했다. 

 Date() 객체를 활용할 때 유의할 점은 month의 경우 1월이 인덱스 1이 아니라 0부터 시작한다는 점, 그리고 getDay() 메서드를 쓰면 요일이 아니라 요일에 해당하는 인덱스가 반환된다는 점 등을 들 수 있겠다.

 

Solutions

Solution 1.
function solution(a, b) {
  /* My Solution */
  const date = new Date(2016, a - 1, b);
  const dates = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
  return dates[date.getDay()];
}
Solution 2.
function solution(a, b) {
  /* toString() Ver. */
  return new Date(2016, a - 1, b).toString().slice(0, 3).toUpperCase();
}
Solution 3.
function solution(a, b) {
  /* Cal Ver. */
  const months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  const dates = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
  let daySum = b + 4;
  for (let i = 0; i < a - 1; i++) {
    daySum += months[i];
  }
  return dates[daySum % 7];
}
Solution 4.
function solution(a, b) {
  /* reduece() Ver. */
  const months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  const dates = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
  let daySum;
  if (a < 2) {
    daySum = b + 4;
  } else {
    daySum = months.slice(0, a - 1).reduce((acc, curr) => acc + curr) + b + 4;
  }
  return dates[daySum % 7];
}
728x90
반응형

댓글