BOJ 5635 with js _ 생일

1 minute read

5635 with Node.js _ 생일

입력

첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)

다음 n개 줄에는 각 학생의 이름과 생일이 “이름 dd mm yyyy”와 같은 형식으로 주어진다. 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.

이름이 같거나, 생일이 같은 사람은 없다.

출력

첫째 줄에 가장 나이가 적은 사람의 이름, 둘째 줄에 가장 나이가 많은 사람 이름을 출력한다.

정답 코드

const fs = require("fs");
const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `` // 기본 입력값 설정 (백준 코딩테스트에서 비워놔도 무방하다.)
).split("\n");

const input = (() => {  //input()을 호출할 때마다 한줄씩 읽어온다.
  let line = 0;
  return () => stdin[line++];
})();

const peopleCount = Number(input());
let peple = [];
let latest = new Date('1991 1 1'); // 문제에서 가장 빠른 날짜
let earliest = new Date('2010 12 31'); // 문제에서 가장 느린 날짜
let youngestPerson = '';
let oldestPerson = '';

for(let i = 0; i < peopleCount; i++ ){
  const [name, day, month, year] = input().split(' ');
  const date = new Date(year + ' ' + month + ' ' + day);
  if (date >= latest){ // 최신 시간보다 더 늦은 시간일 때 
    latest = date;
    youngestPerson = name;
  }

  if (date <= earliest){ // 가장 이른 시간보다 날짜가 이를 때
    earliest = date;
    oldestPerson = name;
  }
}

console.log(youngestPerson + '\n' + oldestPerson); // 결과 값 출력

살펴보아야 할 점

JS에서 Date 함수

https://www.w3schools.com/jsref/jsref_obj_date.asp

날짜 문제에서 대소 비교가 날짜의 빠르고 느린 상황임을 염두해야 한다.

문제 링크

https://www.acmicpc.net/problem/5635

Leave a comment