코테연습
111. 백준 : 2839 설탕 배달 Javascript
hxunz
2022. 9. 8. 14:34
https://www.acmicpc.net/problem/2839
2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 구하라 - 주어진 자료는 무엇인가?
- N = 총 배달해야 되는 킬로그램
- 3kg, 5kg 짜리 설탕 봉지 - 조건은 무엇인가?
- 최대한 적은 봉지를 들고 가야한다.
- 들고 갈 수 없는 경우에는 -1을 리턴한다.
2. 계획
- N이 5로 나누어 떨어지면 그 값을 리턴한다.
- 5를 더하면서 count+1을 해준다. 이때, 합계가 N을 넘지 않도록 한다.
- N이 3으로 나누어 떨어지면 그 값을 리턴한다.
- 남은 값을 3으로 나눴을때 나누어 떨어지면 이 값과 count 값을 더한 후 리턴한다.
- 들고 갈 봉지가 없으면 -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
}