JavaScript 백준 온라인 알고리즘 공부
백준 2292 번 Node.js 문제풀이
const fs = require("fs");
const input = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString()
: `1000000000`
).trim();
let N = Number(input);
let i = 1;
let sum = 1;
while (sum < N) {
sum += 6 * i;
i++;
}
console.log(i);
완전 스스로 풀자고 매달렸으나 역시 문제의 핵심을 잡아내는 무언가가 여전히 부족한지 도저히 자력으로 풀수가 없었다. 간단한 힌트, 1번방을 시작으로 6, 12, 18, 24의 배수로 감싸고 있으며 반복문을 사용하라는 정도만 들었는데 아차 싶었다.....
처음부터 자력으로 6의 배수의 반복은 파악했지만 이걸 어떻게 반복문 없이 할지에 매달렸는데 반복문은 써도 된 것이였다. 이전의 '손익분기점' 문제는 처리속도의 제한으로 반복문을 못쓴다는것이 힌트였는데 이번 문제는 그 반대로 2초라는 널널한 처리속도를 생각을 못한 것이다. 심지어 로컬에서 가장 높은 수로 테스트케이스를 해보면 처리속도도 메모리도 그다지 늘어나지도 않는다...
이 사실만 파악했는데도 답은 점점 풀려나갔다. 일정하게 1씩 증가하는 i 숫자에 6의배수만 대입해서는 안되고 그 결과값도 같이 가져가는 sum도 계속 대입해가야 해결되는 문제였던 것이다.
따라서 이 정도만 파악해도 로직이 복잡하지도 코드가 길지도 않는 핵심만 파악하면 어려운 문제가 아니였던 것이다.
고생한거에 비해 아직까지는 정답 자체가 평범한 현실이다. 본인의 (단순히 외우는게 아닌 정말로 문제해결능력을 올리는) 알고리즘 능력증진은 여전히 난항을 겪고있다. 진정한 문제해결능력을 얻을려면 어떤 연구를 해야 할지 정말 고민된다.