본문 바로가기

Algorithm

[백준] 2839번 : 설탕 배달 - C/C++

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