
이 문제는 다음에 올 책의 무게를 고려하는 것이 포인트이다.
문제 해결의 단계는 아래와 같다.
N으로, 최대 무게를 M으로 받는다.books로 받는다.counter로 하여 초기값을 1로 준다.sum과 nextSum으로 현재 박스의 총 책의 무게의 합과 다음 책의 무게의 합을 계산한다.N만큼 루프를 돌며 현재 책의 무게가 최대무게인 M이랑 같아지면 counter를 증가하고, sum과 nextSum의 값을 초기화한다.M을 초과하면 counter를 미리 증가하고, nextSum과 sum의 값을 초기화한다.N값이 0개이면 0을 출력한다.const input = require("fs")
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
.toString()
.trim()
.split("\n")
.map((el) => el.split(" ").map(Number));
const N = input[0][0]; // 책의 갯수
const M = input[0][1]; // 최대 무게 M
const books = input[1];
let counter = 1;
let sum = 0;
let nextSum = 0;
for(let i=0; i<N; i++){
if(sum === M){
counter++;
sum = 0;
nextSum = 0;
}
sum += books[i];
nextSum = sum + books[i+1];
if(nextSum > M){
counter++;
nextSum = 0;
sum = 0;
}
}
if(N === 0)
counter = 0;
console.log(counter);
💡한줄평
사실 이 문제는 한 번에 풀었다. 미리 설계를 하지 않고 예제를 하나씩 넣어가면서 때려맞추기를 했다. 그래서 그런지 코드가 깔끔하지 않고 개연성이 없는 것 같다. 시간관계상 우선 이렇게 풀고 넘어간다. 더 좋은 풀이를 고민하고 추가할 계획이다. 다음부터는 좀 여유를 가지고 문제를 풀이해야겠다.