728x90
문제 풀이 순서는 다음과 같다.
1. n 입력 받기
2. 합리적으로 무게 나누기
필자는 말을 잘 못하기 때문에.. 이정도로 정리하겠다.
최소 개수의 설탕 봉지가 필요한 것이기 때문에
3킬로그램 짜리와 5킬로그램 짜리 중에서 우리는 "5"를 적극 활용하도록 하자.
만약 입력한 수 n이 15라면, 3킬로그램 짜리를 5개, 5킬로그램 0개 가 필요하므로 총 5개가 필요하다.
하지만 5킬로그램만 사용하게 된다면 3킬로그램 짜리 0개, 5킬로그램 3개가 필요하다.
그러니 5킬로그램을 필터링에 걸리도록 작성해주자.
if(n%5==0){
cnt += n/5;
cout << cnt << '\n';
return 0;
}
그럼 3킬로그램짜리는 어떻게 처리할까?
5로 나누어 떨어지지 않을 때 3씩 빼주면서 처리해주면 된다.
n -= 3;
cnt++;
우리는 설탕 봉지의 개수를 출력해야하므로,
3을 뺄 때마다 cnt를 하나씩 증가시켜 주어야 한다.
이제 끝이다. 벌써 문제를 다 풀었다.
전체 코드
#include <iostream>
//설탕 배달
using namespace std;
int main(){
int n;
cin >> n;
int cnt = 0;
while(n>=0){
if(n%5==0){
cnt += n/5;
cout << cnt << '\n';
return 0;
}
n -= 3;
cnt++;
}
cout << "-1" <<'\n';
}
난이도 실버4의 문제였다.
문제를 보고 고비(?)가 왔었는데 어떻게 해야 최소로 출력할 수 있는지.
5만 썼을 때 나머지는 어떻게 처리해야하는지 등이었다.
복잡한 알고리즘을 사용하는 것도 아니었고, 복잡한 함수도 사용된 것이 없다.
단순히 문제를 이해했는가를 물어보는 것 같았다.
자신만만하게 이렇게 이야기하고 분류를 펼쳐봤는데,
네.. 그렇다고 합니다.
그렇다면 내가 작성한 코드가 완벽한 코드는 아닐 것이라는 생각이 든다.
문제를 풀기 보다는... 개념 공부를 더 해야하지 않을까? 라는 생각을 들게 했던 문제였던 것 같다.
더 좋은 풀이가 있다면 댓글로 알려주세요 !!
피드백 환영입니다☺️
728x90
'Algorithm' 카테고리의 다른 글
[백준] 16953번 : A → B - C/C++ (1) | 2025.03.16 |
---|---|
[백준] 11719번 : 그대로 출력하기 2 - C/C++ (0) | 2025.03.15 |
[백준] 1292번 : 쉽게 푸는 문제 - C/C++ (0) | 2025.03.11 |
[백준] 11660번 : 구간 합 구하기 5 - C/C++ (0) | 2025.03.11 |
[백준] 11659번 : 구간 합 구하기 4 - C/C++ (0) | 2025.03.07 |