상세 컨텐츠

본문 제목

백준 2839 [설탕 배달] - JAVA

알고리즘/문제

by Chan.94 2022. 2. 15. 17:22

본문

반응형

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

 

2839번: 설탕 배달

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

www.acmicpc.net

 

풀이

1. 5킬로그램의 봉지를 최대한 많이 선택해야한다.

  (3 ≤ N ≤ 5000) N의 범위가 3이상이기때문에 0개부터 계산한다.

2. 5킬로그램의 봉지 개수를 정할때 순차적으로 개수를 늘려나간다.

3. 5킬로그램의 봉지 개수를 먼저 선택한 후 3킬로그램의 봉지에 대해 고민한다.

  - 5킬로그램의 봉지 개수를 선택한 나머지가 3으로 나누어지지 않는다면 1번을 반복한다.

 

    만약 5킬로그램의 봉지개수가 0이고 3으로 나누어진다면 그것은 정답이라고 할 수 있을까? / 정답이 아닐 수 있다.

    21킬로그램의 최소 봉지 개수를 구한다고 생각해보자.

   

5킬로그램 3킬로그램 나머지 수식 개수
0 7 0 5x0 + 3x7 + 0 7
1 5 1 5x1 + 3x5 + 1  
2 3 2 5x2 + 3x3 + 2  
3 2 0 5x3 + 3x2 + 0 5

5킬로그램 봉지의 개수가 0개일때와 3개일때 둘다 정답의 조건은 만족한다.

하지만 우리는 최소 개수를 찾아야한다.

 

 


소스코드

package algorithm.greedy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 설탕 배당
 *
 */
public class Q2839 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		int arr[] = {3,5};
		int nCnt = -1;
		int n5Bag = 0;
		int nMinCnt = Integer.MAX_VALUE;
		while(true) {
			//선택
			int n5BagWeight = 5 * n5Bag;
			
			//적절성 검사 & 해답 검사
			if(n5BagWeight > N) {
				break;
			}else if(n5BagWeight == N) {
				nCnt = n5Bag;
				break;
			}else {
				int nTempN = N - n5BagWeight;
				
				if(nTempN % 3 == 0) {
					nCnt = n5Bag + (nTempN / 3);
					
					if(nMinCnt > nCnt) {
						nMinCnt = nCnt;
					}
				}
			}
			n5Bag++;
		}
		
		System.out.println(nCnt);
	}

}

 

반응형

'알고리즘 > 문제' 카테고리의 다른 글

백준 1202 [보석 도둑] - JAVA  (0) 2022.02.28
백준 1715 [카드 정렬하기] - JAVA  (0) 2022.02.25
백준 11047 [동전 0] - JAVA  (0) 2022.02.14
백준 12100 [2048 (Easy)] - JAVA  (0) 2022.01.13
백준 16234 [인구 이동] - JAVA  (0) 2022.01.10

관련글 더보기

댓글 영역

>