
https://www.acmicpc.net/problem/2839
오늘은 백준 2839번 설탕 배달 문제를 풀어봤다.
처음에는 무작정 if랑 while문으로 접근했는데, 자꾸 원하는 결과가 안 나오길래 로직을 다시 차근차근 정리해봤다.
핵심은 5kg 봉지를 최대한 먼저 쓰고, 안되면 3kg을 하나씩 써보면서 나눠지는지 확인하는 것이었다.
설탕 Nkg을 배달해야 한다.
설탕은 오직 3kg 봉지와 5kg 봉지만 사용 가능하다.
최소 봉지 개수로 설탕을 정확하게 배달해야 한다.
정확하게 나눌 수 없다면 -1을 출력해야 한다.
처음엔 5로 나눠질 때까지 3을 빼는 방식이 떠올랐고, 이것만 잘 구현하면 되겠다고 생각했다.
핵심 포인트는:
n % 5 == 0 이면 가장 이상적인 경우이므로 바로 5로 나눈 몫을 정답으로 출력
안되면 3kg 하나 썼다고 생각하고 n -= 3, 봉지 수 count++
n이 0보다 작아지면 더 이상 나눌 수 없으므로 -1
using System;
namespace backjoon
{
internal class Program
{
static void Main()
{
int n = int.Parse(Console.ReadLine());
int count = 0;
while (n >= 0)
{
if (n % 5 == 0)
{
count += n / 5;
Console.WriteLine(count);
return;
}
n -= 3;
count++;
}
Console.WriteLine(-1);
}
}
}
처음에는 while(count > 5 || count > 3) 이런 식으로 조건을 잘못 설정해서 원하는 결과가 안 나왔다.
결국 핵심은 계속해서 3kg 하나씩 써보면서 5로 정확히 나눠지는 시점을 찾는 것이었다.
또한 n % 5 == 0이면 n / 5는 딱 맞게 떨어지므로 이때 바로 출력하고 종료하는 방식도 깔끔하다고 느꼈다.
이 문제 덕분에 조건문 순서와 반복문 설계에 대해 더 생각해보게 되었다.