[백준 2839] 설탕 배달(Java)

최민길(Gale)·2023년 1월 13일
1

알고리즘

목록 보기
10/172

문제 링크 : https://www.acmicpc.net/problem/2839

이 문제는 그리디 알고리즘 문제로 아이디어만 생각난다면 쉽게 풀 수 있습니다.

가장 적은 봉지를 들고 가기 위해선 더 많은 설탕을 담을 수 있는 5킬로그램 봉투가 많아야 합니다. 따라서 최초에 가능한 최대의 5킬로그램 봉투 개수를 설정한 후 개수를 줄여나가면서 남은 설탕이 3킬로그램 봉투에 나누어 떨어지는지를 체크하시면 되겠습니다.

다음은 코드입니다.

import java.util.*;
import java.io.*;

public class Main{
    static int N;
    static int res = -1;

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());

        // 5킬로그램을 가장 많이 가져가는 것이 최대한 적은 봉투 수
        // 따라서 가장 많이 5킬로그램을 가져갈 수 있는 경우의 수에서 점점 줄여나가기
        int fiveNum = N/5;
        int threeNum = 0;

        // 5킬로그램 봉투가 0보다 작을 경우 만족하는 조건이 없으므로 -1 출력
        while(fiveNum>=0){
            int remain = N - (fiveNum*5);

            // 5킬로그램 다 들고 남은 개수가 3킬로그램 단위로 모두 나눌 수 있는 경우 정답 출력
            if(remain%3==0){
                threeNum = remain/3;
                res = fiveNum + threeNum;
                break;
            }

            // 5킬로그램 봉투 개수 줄이기
            fiveNum--;
        }

        System.out.println(res);
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글

관련 채용 정보