본문 바로가기
알고리즘

[프로그래머스 / 코딩테스트 연습] 2016년

by 지 요니 2023. 4. 10.
🌷 문제 설명

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일같은 날짜는 주어지지 않습니다)
🌷 입출력 예

 

a b result
5 24 "TUE"

 

🌷 나의 문제 풀이
  •  원시적인 방법(알고리즘 이용..)
function solution(a, b) {
// 윤년: 2원 29일 까지 있고, 1년 366일
  let month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  let day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
  let answer = "";
  let sum = 0;

  for (let i = 0; i < a - 1; i++) {
    sum += month[i];
  }
  sum += b - 1;
  answer = day[sum % 7];
  return answer;
}
  • 구현 설명

👉 먼저 날짜와 요일에 대한 정보를 담은 배열을 생성(month, day)하고 Month(a)까지의 날짜 수를 모두 더한다.(sum)      sum에 Day값(b)을 더하는데 현재 문제에서 기준 일이 1/1일이므로 빼기 1을 해준다!

그리고 7일 간격으로 날짜는 반복되므로 7의 나머지를 구하면 정답을 구할 수 있다

* 또한 문제에서 1월 1일이 금요일 이라고 했으므로 요일의 배열의 시작을 "FRI"로 해주었다


처음에는 Date()메소드의 존재자체를 몰라서 구글에 요일 구하기 알고리즘을 검색해봤다.. 하하

나중에 알고보니 Date()로 한, 두줄이면 풀 수 있었다는 것에 크게 뒤통수를 맞았지만 이렇게 하나 더 크게 알아갔다고

생각해야지 뭐 우째 ㅎ 메소드 공부 뿐만아니라 객체나 클래스도 공부를 더욱 열심히 해야겠다고 생각하게된 문제였다!!

있는걸 활용하려면 우선 많이 알아야한다! 모르면 검색도 못하니까^^

 

🌷 다른 문제 풀이

👉  자바스크립트에서 지원하는 Date 클래스를 이용

 

1.

function solution(a, b) {
let day = new Date(2016, a - 1, b); // 날짜 구하기
    return day.toString().slice(0,3).toUpperCase();
}

생성된 Date를 문자열로 반환하면 앞 세 글자(0~2 인덱스)는 요일의 줄임말

 

2.

function solution(a, b) {
// WEEKDAY에 일~토까지 요일 넣어줌
  const WEEKDAY = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
  let day = new Date(2016, a - 1, b); // 날짜 구하기(월은 0부터 시작이므로 -1해주기)

  return WEEKDAY[day.getDay()];	//getDay()함수는 날짜의 요일을 받아오는 함수로 일요일부터 토요일까지 0부터 6을 반환
}

getDay() 함수는 일요일부터 토요일까지를 각각의 숫자인 0부터 6까지로 반환

 

🌷 객체
  • Date  객체: 날짜를 저장할 수 있고, 날짜와 관련된 메서드도 제공해주는 내장 객체
더보기
  • - 객체 생성하기 
  • 1. new Date()
    • () 안에 아무런 인수를 전달하지 않으면 현재 날짜와 시간을 리턴
  •  2. new Date("날짜를 나타내는 문자열")
    • 인수로 날짜를 나타내는 문자열을 전달하면 날짜와 시간을 나타내는 인스턴스를 리턴
    •  MONTH는 0(1월)부터 11(12월) 사이의 숫자로 이루어짐
  •  3. Date 생성 시 사용 가능한 날짜 양식
      • ISO 날짜 양식 : YYYY-MM-DDTHH:MM:SS
      • Long 날짜 양식 : MMM DD YYYY / DD MMM YYYY
      • Short 날짜 양식 : MM DD YYYY / YYYY MM DD
      • Full 날짜 양식 : Thu Mar 14 2022 13:32:00 GMT+0900 (대한민국 표준시)
  • Dae 객체의 메서드
  1. getFullYear(): 연도(네 자리수)를 반환
  2. getMonth(): 월을 반환(0~11)
  3. getDate(): 일을 반환(1~31)
  4. getHours(), getMinutes(), getSeconds(), getMilliseconds(): 시, 분, 초, 밀리초 반환
  5. getDay(): 일요일을 나타내는 0부터 토요일을 나타내는 6까지의 숫자 중 하나를 반환

 

 

댓글