[백준 문제풀이] 5635 생일 Javascript

방예서·2022년 6월 17일
0

코딩테스트 준비

목록 보기
21/37

5635 생일

문제

어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.

입력

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

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

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

출력

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


풀이


// 백준 5635번 생일 javascript

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const n = input[0];

const bdayList = [];
const name = [];
const date = [];

// bdayList = [yy, mm, dd, name]
for (let i=1; i<=n; i++) {
  bdayList.push(input[i].split(" ").reverse());
}

for (let i=0; i<n; i++){
  bdayList[i][0] = Number(bdayList[i][0]);
  if (bdayList[i][1].length === 1) bdayList[i][1] = '0' + bdayList[i][1];
  if (bdayList[i][2].length === 1) bdayList[i][2] = '0' + bdayList[i][2];
}

for (let i=0; i<n; i++) {
  name.push(bdayList[i][3]);
  date.push(Number(bdayList[i].splice(0,3).join("")));
}

console.log(name[date.indexOf(Math.max(...date))]);
console.log(name[date.indexOf(Math.min(...date))]);

단순한 구현 문제라고 생각했는데... 입력 받은 과정을 내가 원하는 모양의 형태로 만드는 것이 꽤나 까다로웠다.
생일 기념 풀어본 문제니 고집스럽게 풀어보았다.🙄

일단 입력 받은 생일을 '19900201' 식의 숫자로 바꾸면 큰 숫자인 사람이 나이 적은 사람이고, 작은 숫자인 사람이 나이 많은 사람이라는 생각에서 풀어갔다.

하나하나 비교하자니 더더욱 복잡해질 것 같아서...

근데 입력이 한자리 수 월, 일은 0을 빼고 준다니까 또 복잡해지는 거다. 그리고 자바스크립트에서 입력을 받을 때 년도에서 \r 이렇게 뒤에 붙어버리니 참 난감했다.

그래서 0을 붙여주는 작업과 년도를 Number() 처리해버리는 반복문을 작성해주었다.

그런 작업을 끝내고 join으로 만들어준 후 숫자를 비교해서 출력했다.

🥳🎉🎈🎊🎂🍰🍻🌞⛄💛

profile
console.log('bang log');

0개의 댓글