본문 바로가기
BaekJoon/Bronze

[BOJ/JAVA] 백준 2839 : 설탕 배달 (자바)

by HoonSikE 2022. 3. 25.
반응형
SMALL
문제 정보
  문제명   - 설탕 배달
  난이도   - 브론즈 I
문제 번호 - 2839번

문제 링크

BOJ_B1_2839_설탕_배달

 

2839번: 설탕 배달

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

www.acmicpc.net


문제
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다.
상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

입력
첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

출력
상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

예제 입력/출력
예제 입력 예제 출력
18 4
4 -1
6 2
9 3
11 3

알고리즘 분류
● 수학
다이나믹 프로그래밍
그리디 알고리즘


소스코드 - 반복문
package Lv1_Bronze;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * @author HanHoon
 * @category 수학, 다이나믹 프로그래밍, 그리디 알고리즘
 * https://www.acmicpc.net/problem/2839
 */
public class BOJ_B1_2839_설탕_배달_for_if {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// 배달할 설탕 Nkg
		int N = Integer.parseInt(br.readLine());
		int cnt = 0;
		// 설탕은 3kg, 5kg 2가지가 있다
		while(N>=0) {
			if(N%5==0) {
				cnt += N/5;
				System.out.println(cnt);
				return;
			}
			N -= 3;
			cnt++;
		}
		System.out.println(-1);
		br.close();
	}
}

소스코드 - Backtracking
package Lv1_Bronze;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * @author HanHoon
 * @category 수학, 다이나믹 프로그래밍, 그리디 알고리즘
 * https://www.acmicpc.net/problem/2839
 */
public class BOJ_B1_2839_설탕_배달_재귀호출 {
	// 설탕은 3kg, 5kg 2가지가 있다
	public static void backtraking(int cnt, int weight) {
		if(weight%5== 0) {
			cnt += weight/5;
			System.out.println(cnt);
			return;
		}
		if(weight < 0) {
			System.out.println(-1);
			return;
		}
		backtraking(cnt+1, weight-3);
	}
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// 배달할 설탕 Nkg
		int N = Integer.parseInt(br.readLine());
		backtraking(0, N);
		br.close();
	}
}

소스코드 - Greedy
package Lv1_Bronze;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * @author HanHoon
 * @category 수학, 다이나믹 프로그래밍, 그리디 알고리즘
 * https://www.acmicpc.net/problem/2839
 */
public class BOJ_B1_2839_설탕_배달_greedy {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// 배달할 설탕 Nkg
		int N = Integer.parseInt(br.readLine());
		// 설탕은 3kg, 5kg 2가지가 있다
		// 4kg, 7kg은 가져갈 수 없음.
		if(N==4||N==7)
			System.out.println(-1);
		// 5로 나눠진다면 5kg로 다 가져가면 됨.
		else if(N%5 == 0)
			System.out.println(N/5);
		// 나머지가 1이라면 6kg(3kg*2)가 2개이므로 결국 +1
		// 나머지가 3이라면 8kg(5kg*1, 3kg*1)로 결국 +1
		else if(N%5 == 1 || N%5 == 3)
			System.out.println(N/5 +1);
		// 나머지가 2이라면 10kg+2kg = 12kg(3kg*4)가 2개이므로 결국 +2
		// 나머지가 4이라면 9kg (3kg*3)로 결국 +2
		else if(N%5 == 2 || N%5 == 4)
			System.out.println(N/5+2);
		br.close();
	}
}

BaekJoon List
 

BaekJoon List

BOJ Start!! ● [BOJ] 백준 회원가입, 시작하는 법 ● [BOJ] 등급(티어) 및 Solved.AC 적용 ● [BOJ/JAVA] 백준 소스코드 제출 시 유의사항(자바) Bronze ● Bronze V  - ● Bronze IV  - ● Bronze III  -..

han-hoon.tistory.com


  

기회는 준비된 자에게 찾아온다.

 


 

반응형
LIST

댓글