[백준] - 2839 설탕 배달(Python/Javascript)

밀루·2023년 11월 14일
0

BOJ

목록 보기
40/43

문제 링크

풀이

dp로 풀었다.

[0, -1, -1, 1, -1, 1]로 초기화 되어있는 l1이라는 배열을 만들고 for문을 6부터 n+1까지 돌면서 l1[tmp]와 l1[tmp2]의 값이 -1이 아니면 이전의 tmp 값에 +1을 하는 값을 l1에 추가했다. 여기서 둘 다 -1이라면 l1에 -1을 추가하는 식으로 구현했다.

python 코드

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])

node.js 코드 (Javascript)

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]);
profile
이밀루의 도전

0개의 댓글