어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.
첫째 줄에 반에 있는 학생의 수 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
으로 만들어준 후 숫자를 비교해서 출력했다.
🥳🎉🎈🎊🎂🍰🍻🌞⛄💛