코딩연습

[백준 알고리즘] 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());