문제
https://www.acmicpc.net/problem/2839
문제 설명
n 킬로그램의 설탕이 주어졌을 때 5kg과 3kg으로 나누어
정확히 0kg의 설탕으로 만들 수 있으면 각각의 설탕 봉지 개수를
만들 수 없다면 -1을 출력하면 된다.
코드
#include <iostream>
using namespace std;
int main() {
int n; cin >> n;
int kg3 = 0, kg5 = 0;
while (n > 1) {
if ((n % 5) == 0) {
n -= 5;
kg5++;
}
else {
n -= 3;
kg3++;
}
}
if (n == 0) cout << kg3 + kg5 << '\n';
else cout << -1 << '\n';
}
코드 설명
설탕이 남아있으면 안되기 때문에 n이 1 이상일 때 반복하는 while문을 넣었다.
이제 중요한 것은 조건문인데, 문제에 '5kg으로 뺄 수 있으면 우선적으로 5kg 뺀다'라는 요구 사항이 있다.
그래서 먼저 n에서 5를 빼주는데, 단 n을 5로 나눈 나머지가 0일 때만 빼주고 그 외에는 3을 뺀다.
만약 해당 조건을 두지 않으면 n이 6인 상황에서 5를 빼고 1이 남아 결과값으로 -1을 출력하는 불상사가 발생한다.
그 이후에는 3kg 봉지 개수와 5kg 봉지 개수를 더해 출력하면 코드는 끝이 난다.
추가로 생각해 볼 것
내 코드는 3과 5를 반복적으로 빼주기 때문에 브루트포스 알고리즘에 더 가까운 것 같다.
'Koala - 11기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/Python] 1551번: 수열의 변화 (0) | 2023.07.15 |
---|---|
[백준/Python3] 2839번: 설탕 배달 (0) | 2023.07.15 |
[백준/python] 1267번: 핸드폰 요금 (0) | 2023.07.15 |
[백준/Python] 4458번: 첫 글자를 대문자로 (0) | 2023.07.15 |
[백준/python] 9012번: 괄호 (0) | 2023.07.14 |