dp로 풀었다.
[0, -1, -1, 1, -1, 1]로 초기화 되어있는 l1이라는 배열을 만들고 for문을 6부터 n+1까지 돌면서 l1[tmp]와 l1[tmp2]의 값이 -1이 아니면 이전의 tmp 값에 +1을 하는 값을 l1에 추가했다. 여기서 둘 다 -1이라면 l1에 -1을 추가하는 식으로 구현했다.
n=int(input())
l1=[0,-1,-1,1,-1,1]
k=100000000
for i in range(6,n+1):
tmp,tmp2=i-3,i-5
m=0
if l1[tmp]!=-1:
k=l1[tmp]+1
if l1[tmp2]!=-1:
k=min(k,l1[tmp2]+1)
elif l1[tmp]==-1 and l1[tmp2]==-1:
m=1
if m==0: #리스트에 추가
l1.append(k)
else:
l1.append(-1)
print(l1[n])
let fs = require('fs');
//const inputs = fs.readFileSync('/dev/stdin').toString().split('\n');
const inputs = fs.readFileSync(__dirname+'/ex2.txt').toString().split('\n');
const n = Number(inputs[0]);
let l1 = [0, -1, -1, 1, -1, 1];
let k = 1000000
for (let i=6; i< n+1; i++) {
let tmp = i - 3, tmp2 = i -5, m = 0;
if (l1[tmp] !== -1) {
k = l1[tmp]+1;
}
if (l1[tmp2] !== -1) {
k = Math.min(k, l1[tmp2] + 1);
}
else if (l1[tmp] === -1 && l1[tmp2] === -1) {
m = 1;
}
if (m === 0) {
l1.push(k);
}
else {
l1.push(-1);
}
}
console.log(l1[n]);