JavaScript 백준 온라인 알고리즘 공부
백준 1152번 Node.js 문제풀이
const fs = require("fs");
const [input] = (
process.platform === "linux" ? fs.readFileSync("/dev/stdin").toString() : ` `
)
.trim()
.split("\n");
let newArr = input.split(" ");
if (newArr[0] === "") {
newArr.pop();
}
console.log(newArr.length);
이 문제는 구현 자체는 어렵지는 않다. 문제는 함정이 숨어 있다는 것이다.
split(" ")
으로 감싸면 공백으로 구분되어진 단어들은 각각 ""(따옴표)
로 감싸지고 그렇게 만들어진 배열의 길이가 곧 단어의 갯수가 되므로 이 로직 자체는 이상이 없으며 대부분 테스크 케이스를 직접 만들어 넣어보면 재대로 출력이 된다.
문제는 그런데도 틀렸다는 답이 나온다는 것이다. 이러면 뭔가 사소한 것까지 의심해보게 되는 딜레마에 빠지고 이렇게 저렇게 의심하고 확인해봐도 테스크 케이스는 잘 작동하니까 혼란에 빠지게 된다.
뭘 놓쳤는지 원인만 알아보니 어떠한 글자도 없고 공백조차 없는 입력을 적용하면 따옴표가 적용되어 배열의 길이가 1로써 존재하는 신기하다면 신기한 경우가 있다. 즉 단어도 빈공간도 아무것도 안넣는 테스크 케이스를 생각 못한게 원인이였다.
원인을 알게되니 빈 요소가 생겼을시에 그 배열의 첫번째 요소만 지운다는 조건문을 추가하는 발상을 바로 떠올렸고 그 발상 하나로 정답을 만들었다.
문제를 파악하는 건 정말 중요하면서도 내 것으로 만들기는 여전히 힘든 현실이다.....