자스로 백준 문제를 풀려고 했는데 DP 문제를 추천받았다. 피보나치 수를 이해하는 브론즈 2의 간단한 문제다. 근데 1, 2를 입력받았을 때 상황을 빼고 코드를 짜서 한 번 NameError가 남 헿
그리고 자스로 리스트 다루는 법이랑 반복문 쓰는 방법을 까먹었다. 파이썬에서 반복문 쓰는 것처럼 썼는데 전혀 아니었다. 이번 기회에 안 헷갈리게 확실히 정리해야겠다.
자스로 백준 문제 풀 때 특징은
- 입력 예제를 텍스트 파일로 저장하기
- 그 파일에서 입력 예제 불러오기
이다.
VSCode로 문제를 풀 때와 백준으로 문제 풀 때 예제 입력 방법이 다른데 각 상황에 따라 입력 코드를 주석처리해야 한다. 귀찮고 까먹을 것 같아 인터넷을 이리저리 찾아보니 삼항 연산자로 입력을 받으면 될 것 같았다.
근데 파일 경로를 왜 저렇게 해야하는지 모르겠다. 문제를 푸는 sol.js 파일이랑 입력 예제가 들어있는 example.txt 파일이랑 같은 위치에 있는데 왜 저렇게 되는지
아 VSCode를 어느 폴더에서 여는가에 따라 다른 거 같다.
그리고 input을 이상하게 받았는지(아마 문자열로 받은 듯?) ["10"] 이렇게 돼서 문자열을 숫자로 바꾸는 Number를 이용해서 n을 지정했다.
파이썬으로 문제를 풀 때는 n+1개만큼 0을 넣은 리스트를 먼저 만들고 for문에 따라 각 자릿수의 피보나치 수를 구했는데 생각해 보니 그럴 필요가 없는 것 같아 dp 리스트를 만들면서 바로 피보나치 수를 넣었다.
지금 보니 16, 17번째 줄은 필요 없다!
const fs = require('fs');
const filePath = process.Platform === 'linux' ? '/dev/stdin' : '<입력 예제가 있는 파일의 경로>';
let input = fs.readFileSync(filePath).toString().split('\n');
var n = Number(input[0])
var dp = []
for (let i = 0; i <= n; i++) {
if (i === 0) {
dp.push(0)
} else if ( i === 1 || i === 2) {
dp.push(1)
} else {
dp.push(dp[i-1] + dp[i-2])
}
};
if (n === 1 || n === 2) {
console.log(1)
} else {
console.log(dp[n])
}