본문 바로가기
코테연습

111. 백준 : 2839 설탕 배달 Javascript

by hxunz 2022. 9. 8.

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
      - 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 구하라
  • 주어진 자료는 무엇인가?
     - N = 총 배달해야 되는 킬로그램
     - 3kg, 5kg 짜리 설탕 봉지
  • 조건은 무엇인가?
     - 최대한 적은 봉지를 들고 가야한다.
     - 들고 갈 수 없는 경우에는 -1을 리턴한다.

2. 계획

  1. N이 5로 나누어 떨어지면 그 값을 리턴한다.
  2. 5를 더하면서 count+1을 해준다. 이때, 합계가 N을 넘지 않도록 한다.
  3. N이 3으로 나누어 떨어지면 그 값을 리턴한다.
  4. 남은 값을 3으로 나눴을때 나누어 떨어지면 이 값과 count 값을 더한 후 리턴한다.
  5. 들고 갈 봉지가 없으면 -1을 리턴한다. 

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (N) => {
  // N이 5로 나누어 떨어지면 그 값을 리턴한다.
  if (N % 5 === 0) {
    return N / 5
  }


  let count = 0;
  let sum = 0;
  // 5를 더하면서 count + 1을 해준다.이때, 합계가 N을 넘지 않도록 한다.
  while (sum < N - 5) {
    sum += 5;
    count++;
    if ((N - 5) % 3 === 0) {
      break;
    }
  }

  // N이 3으로 나누어 떨어지면 그 값을 리턴한다.
  if (N % 3 === 0) {
    if (count > N / 3 || (N - sum) < 3 || (N - sum) % 3 !== 0) {
      return N / 3
    }
  }


  // 남은 값을 3으로 나눴을때 나누어 떨어지면 이 값과 count 값을 더한 후 리턴한다.
  if ((N - sum) % 3 === 0) {
    return count + ((N - sum) / 3)
  }

  //들고 갈 봉지가 없으면 -1 리턴
  return -1
}

 

댓글