[백준] 2839. 설탕배달 (자바스크립트/node.js/javascript/알고리즘/코딩테스트)

2021. 4. 10. 17:31Front-end/알고리즘

728x90
반응형

[백준] 2839. 설탕배달

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 157729 50157 39561 32.945%

 

문제

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

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

출력

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

 

예제 입력 1

18

 

예제 출력 1

4

 

 

예제 입력 2

4

 

예제 출력 2

-1

 

 

예제 입력 3

6

 

예제 출력 3

2

 

 

예제 입력 4

9

 

예제 출력 4

3

 

 

예제 입력 5

11

 

예제 출력 5

3

 


내가 작성한 코드 (자바스크립트)

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString();

let N = Number(input);
let five = 0;
let three = 0;

while(true){
    if(N % 5 === 0){
        five = N / 5;
        console.log(five + three);
        break;
    }
    if(N < 0){
        console.log(-1);
        break;
    }
    N = N - 3;
    three++;
}

5kg 봉지의 수를 five, 3kg 봉지의 수를 three라고 한다.

 

주어진 수 N이 5로 나누어 떨어진다면 그 몫을 출력하는 것이 가장 적은 수가 될 수 있을 것이다.

5로 나누어떨어지지 않는다면, 3을 뺀다. 그리고 three를 1개 늘린다. (3kg 봉지의 수 1개 증가)

그리고 또 5로 나누어떨어지는지 확인한 후, 나누어 떨어진다면 5로 나눈 몫이 5kg 봉지의 수가 되고, 이것과 3kg 봉지의 수인 three를 더한 값을 출력한다. 그리고 반복문을 탈출한다.

N이 음수가 된다면 -1을 출력하고 반복문을 탈출한다.

 

( 이 경우 3kg 봉지로만 구성되는 수 더라도 마지막에 N이 0이 되면서 다음 반복문에서 if (N % 5 === 0)에 걸리기 때문에 0 % 5 는 0이고 0 / 5도 0이기 때문에 five는 0이 된다. 결국 three의 값이랑 같은 것이기 때문에 잘 되는 것을 확인할 수 있다.)

 

처음에는 꽤 복잡하게 풀었다. 그렇게해도 풀긴 풀었지만, 다른 사람들의 코드를 참고해보니 굉장히 간단한 코드로 풀 수 있다는 것을 알게 되었다. 앞으로는 너무 복잡하게 코드가 작성된다면 더 간단하고 쉬운 방법으로 접근할 수 있도록 해야겠다.

728x90
반응형