본문 바로가기
Computer/Algorithm_Java

[BaekJoon] 2839번 설탕 배달 문제풀이 (Success)

by HJ0216 2023. 7. 28.
 

2839번: 설탕 배달

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

www.acmicpc.net

 

Language: Java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int kg = Integer.parseInt(br.readLine());
 
        int i = 0;
        int j = 0;
 
        boolean b = false;
 
        Loop: for (i = 0; i <= kg / 3; i++) {
            for (j = 0; j <= kg / 5; j++) {
                if (3 * i + 5 * j == kg) {
                    b = true;
                    break Loop;
                }
            }
        }
 
        if (b) {
            bw.write((i + j) + "");
        } else {
            bw.write("-1");
        }
 
        bw.flush();
        bw.close();
 
    }
 
}
 
 
 

🤔 해설

1. 일차방정식

    - i와 j의 범위를 줄이기 위해 입력값/3, 입력값/5로 조정

    - boolean 타입의 변수를 활용하여, 해가 있을 경우와 없을 경우 구분

 

😮 이 외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int kg = Integer.parseInt(br.readLine());
 
        int cnt = 0;
        while (true) {
            if (kg % 5 == 0) {
                bw.write(((kg / 5+ cnt) + "");
                break;
            } else if (kg < 0) {
                bw.write("-1");
                break;
            }
            kg -= 3;
            cnt++;
        }
 
        bw.flush();
        bw.close();
 
    }
 
}
 
 
 

1. if 조건문

    - 최대한 5kg을 활용하기 위해 while 반복문 안에서 if 조건문을 첫번째로 검사

    - 3kg을 이용할 때마다, cnt를 추가하여 총 봉지 개수 변경

2. else if 조건문

    - 3kg에 담고도 남을 경우, 즉 정확한 kg를 맞출 수 없는 경우 -1 출력

3. cnt

    - 5kg 봉지 개수는 나눗셈의 몫을, 3kg 봉지 개수는 cnt을 활용

 

 

 

🔗 소스 코드
HJ0216/TIL/BOJ

 

📚 참고 자료

 

백준 2839번 java 자바 설탕배달 (수학 1)

설탕은 3kg봉지 5kg봉지 가 있는데 n(입력)kg를 배달해야 하고 가장 적은 봉지를 들고가야 하는 알고리즘이다. 뭐 간단하게 5kg로 최대한 들고 가고 남은 것을 3kg로 들고가면 된다고 생각이 된다. 뭐

hellodoor.tistory.com