여는 글
Node.js/JavaScript 입력값 받기
나는 항상 이 값 외우는게 어렵다.
node.js 환경에서는 그냥 input 값 하나 만들어서 연습용으로 사용하고 다른 분들이 잘 써두신거 틈틈히 보면서 외우는 중이다.
위의 링크의 작성자 분이 깔끔하게 잘써주셔서 애용한다.
이번 눈높이 개발 챌린지를 신청한 이유는 두가지였다.
코테 챌린지 7기 OT때, 말씀해주신 방향성과 내 방향성이 부합해서 만족스럽게 수행하고 있다. 회사에 일찍 출근해서 풀고나서 오전 업무 마치고 쉴 때, 후다닥 제출할 문서 작성하는 루틴이 꽤나 보람차고 알차다.
입력값, 출력값
3
21 Junkyu
21 Dohyun
20 Sunyoung
→ 즉, 여러줄로 받아야하므로 아래의 코드를 먼저 작성한다.
const fs = require("fs");
const lines = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
다양한 도전 방법
직관적인것을 지키면서 가독성을 나름 좋게 쓰고싶었다.
그래서 최대한 직관적이게 쓰고 불필요한 로직들을 하나씩 처리해봤다.

const fs = require("fs");
const lines = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [n, ...students] = lines;
const member = students.map((student, index) => {
const [age, name] = student.split(" ");
return { age: parseInt(age), name, index };
});
member.sort((a, b) => a.age - b.age || a.index - b.index);
member.forEach((student) => {
console.log(`${student.age} ${student.name}`);
});
하지만 생각해보니, 어차피 차례대로 순회할텐데 너무 과한 생각이 들었다. 역시나 메모리도 시간도 많이 잡아먹는 듯했다.
const fs = require("fs");
const lines = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [n, ...students] = lines;
const sortedStudents = students
.sort((a, b) => a.split(" ")[0] - b.split(" ")[0])
.map((v) => v.split(" ").join(" "))
.join("\n");
console.log(sortedStudents);
const fs = require("fs");
const lines = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [n, ...students] = lines;
const sortedStudents = students
.sort((a, b) => a.split(" ")[0] - b.split(" ")[0])
.map((item) => item.split(","))
.join("\n");
console.log(sortedStudents);
const fs = require("fs");
const lines = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [n, ...students] = lines;
const studentArray = students.sort((a, b) => a.split(" ")[0] - b.split(" ")[0]).join("\n");
console.log(studentArray);
결론
앞으로 메서드를 정확한 의도로 잘 쓰고있는지 한 번 더 고민해야겠다.
예상치 못한 곳에서 뚱뚱한 함수를 만들고 있을 줄이야..
시간 복잡도에 대해 좀 더 고민해보고, 한 번 익힌 메서드 다시 한 번 보자.