[프로그래머스]2016년

jaemin·2020년 11월 25일
0

프로그래머스

목록 보기
8/18
post-thumbnail

2016년

문제 설명

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를 반환하세요.

풀이 과정

1월 달력을 기준으로 보면, 요일을 7로 나눈 나머지가 1이면 금요일, 2이면 토요일, ...6이면 수요일, 7이면 목요일이다.

그런데 월별로 나머지에 해당하는 요일이 바뀌어서 한번에 처리하기가 어렵다.
그렇다면, 1월부터 12월까지 하나의 달력으로 만든다면 어떨까?

2월 1일이 아니라 2월 32일로 계산하면 매월 따로 계산하지 않고 구할 수 있다.
예를 들어, 3월 1일이라면 3월 61일로 계산하는 것이다.

풀이

function solution(a, b) {
  let answer = '';
  let sumB = b;
  const dayOfWeek = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED'];
  const days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  days.forEach((day, i) => {
    if (i < a - 1) sumB += day;
  });
  answer = dayOfWeek[sumB % 7];
  return answer;
}

sumB는 인수로 전달받은 b를 복사해서 전월의 일수들을 더한 값이다.
days는 1월부터 12월까지의 일수를 배열로 만들었다. days 배열을 순회하면서 전월까지의 일수를 더해 sumB에 할당한다.

그 이후에 sumB를 7로 나눈 나머지에 따라 요일을 결정한다.

다른 사람의 풀이

function getDayName(a,b){
  var date = new Date(2016, (a - 1), b);
    return date.toString().slice(0, 3).toUpperCase();
}

Date 함수를 사용해서 푼 사람들이 많았다. 코드 자체는 물론 더 깔끔하지만 이게 알고리즘 문제를 푸는
접근 방법에는 맞지 않는다고 생각한다.

profile
프론트엔드 개발자가 되기 위해 공부 중입니다.

0개의 댓글