✏️기록하는 즐거움
article thumbnail

Link

 

1924번: 2007년

첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

www.acmicpc.net

 

문제

오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

입력 > 첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.
출력 > 첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.

| 예제 입력

1 1

| 예제 출력

MON

 

제출

const fs = require("fs");

const input = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `1 1`
).split(" ");

const date = new Date(`2007-${input[0]}-${input[1]}`);

// solution 1
const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];

console.log(day[date.getDay()]);

// solution 2
console.log(date.toString().slice(0, 3).toUpperCase());

 

풀이과정

Solution 1

getDay()는 해당되는 요일에 따라 0(Sun)~6(Sat) 값을 반환한다.

요일을 담은 배열인 day를 만들고, getDay의 반환값을 day 배열의 인덱스로 사용해줄 수 있다.

 

Solution 2

console.log(date.toString()); // Mon Jan 01 2007 00:00:00 GMT+0900 (대한민국 표준시)

생성한 날짜를 toString() 메서드로 출력하면, Date 객체를 문자열로 반환한 값이 출력된다.

앞에 세자리에는 요일이 출력되므로 slice()toUpperCase()를 사용하면 문제를 해결할 수 있다.

 

개념

Date.prototype.getDay()

  • 주어진 날짜의 현지 시간 기준 요일을 반환한다.
  • 0 이상 6이하의 정수값을 반환하고 0은 일요일, 6은 토요일이다.

Date.prototype.toString()

  • Date 객체의 타임존을 문자열로 반환한다.

String.prototype.slice()

  • 지정한 시작 인덱스부터 끝 인덱스를 포함하지 않고 문자열을 추출하고, 추출한 부분을 새 문자열로 반환한다.

String.prototype.toUpperCase()

  • 문자열을 대문자로 변환해 반환한다.

 

 

 


Comment

profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!