1일 1백준

1일 1백준 : 2839번 설탕 배달

gaonhae 2022. 6. 19. 13:27

1일 1백준 7일차, 오늘 푼 문제는 2839번 문제인 "설탕 배달"이다.

 

 

 

 

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

 

 

 

 

겉보기에는 아주아주 쉬웠던 문제.

나머지 연산자와 몫 연산자만 가지고 1분컷 낼 수 있을 줄 알았지만 어림도 없었다.

 

결국 for문을 선택했다.

3키로 봉지와 5키로 봉지로 N킬로그램을 만든다는 게 무슨 의미일까?

3의 배수의 합과 5의 배수의 합으로 N을 만든다는 뜻이다.

즉 중첩 for문을 통해 3의 배수와 5의 배수를 더하고, 그 값이 N과 일치한다면 if문 안으로 들어가게 하면 된다.

 

if문 안에서는 기존의 k,i값의 합보다 지금의 k,i 값의 합이 더 적을 경우 k,i값을 갱신하는 작업을 한다.

그리고 k,i의 값이 존재한다는 것은 봉지의 개수가 몇 개이든 간에 N을 만들 수 있다는 뜻이므로 -1을 출력하면 안 되게 되는 것이고, 이 부분을 flag 불린값으로 표현했다.

 

 

 

 

 

 

 

 

아래로 내리면 정답 코드가 나옵니다. 문제를 아직 풀지 않으신 분들은 주의해주세요.
코드를 보시고 이해가 안 가시는 게 있다면 댓글로 질문 남겨주세요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

import java.util.Scanner;

public class pro2839 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int a = 9999999;
        int b = 9999999;
        boolean flag = false;

        for (int k = 0; k < n / 3 + 1; k++) {
            for (int i = 0; i < n / 5 + 1; i++) {
                if (3 * k + 5 * i == n) {
                    flag = true;
                    if (k + i < a + b) {
                        a = k;
                        b = i;
                    }
                }
            }
        }

        if (flag == false) {
            System.out.println(-1);
        } else {
            System.out.println(a + b);
        }
    }

}