Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

공부함

알고리즘 문제 풀어보기 - 백준 #2839번: 설탕 배달 (JAVA) 본문

알고리즘/백준

알고리즘 문제 풀어보기 - 백준 #2839번: 설탕 배달 (JAVA)

bassy 2022. 1. 17. 02:06

2839번: 설탕 배달 (acmicpc.net)

 

2839번: 설탕 배달

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

www.acmicpc.net

문제 이해를 제대로 못함..

아니 19같은 경우는 1kg 남아도 5 5 5 5 해서 4가 최소아님?< 계속 이러고 있었다.

아님.. 1,2,4,7과 같은 경우를 제외하곤 3이나 5로 무조건!!! 비율을 맞춰야 함.

11 의 경우에도 5 3 3

4999의 경우에도 5x1000해서 1000이 아니고

5x 998 + 3x3 => 998+3 =1001 번이 나와야 하는거임..

 

5로 나누는걸 기준으로 생각.

while과 if~else문으로만 풀었다.

 

import java.util.Scanner;

public class sugar_2839 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int sugar=scanner.nextInt();
		int count=0;
		
		while(sugar>0) { //설탕이 0이 될때까지 반복하는 루프
			if(sugar%5==0) { //설탕이 5로 나누어 떨어진다면 
				count+=sugar/5; //count값은 설탕을 5로 나눈값.
				sugar=0; //설탕을 0으로 만들어서 루프에서 빠져나간다.
			}
			else { //설탕이 5로 나누어 떨어지지 않을 때.
				if(sugar%5==3) { //설탕을 5로 나눴을 때 나머지가 3이라면
					count+=sugar/5+1; //5로 나눈값+1 을 한다. 예) 18: 5553 23:55553
					sugar=0;  //설탕을 0으로 만들어서 루프에서 빠져나간다
				}
				else { //나머지가 3이 아닌경우
					if((sugar<=12)&&(sugar%3==0)) { //12까지는 3으로 나눠서 나누어 떨어지는지 확인해본다.
						count+=sugar/3;
						sugar=0;  //설탕을 0으로 만들어서 루프에서 빠져나간다
					}
					else if(sugar<5) {	// 설탕이 5보다 작은데 3으로 나누어지지 않으면 1,2,4의 경우.
						count=-1; // -1을 해준다.
						sugar=0;  //설탕을 0으로 만들어서 루프에서 빠져나간다
					}
					else { //그외의 경우는 count+1을 하고 설탕에서 5를 빼준다.
						//그리고 루프 반복.
						count+=1;
						sugar-=5;
					}
				}
			}
		}
		System.out.println(count);
	}
}

 

느낀점:

조금 더 짧고 괜찮은 풀이가 있을 것 같다.

자꾸 계산이 완벽하지 않은 상태에서 고치고 돌려보고 고치고 돌려보고를 반복하는 습관이 있다.

이 습관을 고쳐야겠다.