코딩연습
[백준 알고리즘] Node.js 1817. 짐 챙기는 숌
니 뽀
2023. 11. 21. 11:07
1. 문제
https://www.acmicpc.net/problem/1817
1817번: 짐 챙기는 숌
첫째 줄에 책의 개수 N과 박스에 넣을 수 있는 최대 무게 M이 주어진다. N은 0보다 크거나 같고 50보다 작거나 같은 정수이고, M은 1,000보다 작거나 같은 자연수이다. N이 0보다 큰 경우 둘째 줄에 책
www.acmicpc.net
2. 풀이
- 내가 생각한 방법은 책은 무조건 순서대로만 뽑을 수 있기에 반복문을 이용하여 한 권씩 무게를 가져왔다.
- 이후 sum 이라는 변수에 책의 무게를 더하고, 박스의 개수를 위한 변수인 count를 추가해준다.
- 만약 sum이 주어진 M 의 값보다 작다면 count를 하나 감소시킨다.
- 만약 sum이 주어진 M의 값보다 크다면 sum을 0으로 초기화시키고, 다시 해당 책의 무게를 재검사한다.
const [N, M, ...books] = require('fs').readFileSync('/dev/stdin').toString().trim()
.split(/\s/).map(v => +v);
const findAns = () => {
if(N === 0) return 0; // 책의 개수가 0이면 바로 리턴.
let sum = 0; // 책의 무게를 관리할 변수
let count = 1; // 박스의 개수를 관리할 변수
for(let i = 0; i < N; i++){
sum += books[i];
count++;
// 주어진 무게보다 작다면 count 감소
if(sum <= M) count--;
else if(sum > M) { // 주어진 무게보다 크다면 sum 초기화와 해당 책 재검사를 위해 i를 하나 줄여줌.
sum = 0;
i--;
}
}
return count;
}
console.log(findAns());