day2 백준 2839번 : 설탕 배달 [Java]

문제 출처

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

 

2839번: 설탕 배달

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

www.acmicpc.net

 

1일 1커밋을 하시는 분의 글을 읽고 저정도 꾸준함도 없으면서 개발자가 되겠다고 마음먹은 스스로를 반성하며 하루에 최소 한문제씩 백준을 풀어보려고 한다.

백준 문제 푸는 것에 대한 중요성은 교수님도 몇번이나 강조하셨던 내용인데 여름방학이 끝날 무렵에 도전하는 내 자신에게 부끄러움의 박수를...짝짝짝(눈물)

 

매일 그냥 눈에 먼저 들어온 문제들을 풀어보려고한다.

언어도 그냥 그날 그날 잘 할수 있을만한걸로... 일단 파이썬을 독학한지 얼마 안돼서 실력을 기를겸 당분간은 파이썬으로 풀어보려고한다. day1은 파이썬 복습도 할겸 파이썬으로 풀었지만 나는 자바가 너무나도 부족하기 때문에 일단 당분간은 자바로 1일 1백준 도전...

 

여기까지 잡소리였고 문제 풀이 시작

 

복잡하게 생각하기보다 단순하게 생각하려고 노력했다.

import java.util.Scanner;
public class Q2839 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n;
		n = sc.nextInt();
		
		int count1 = 0;
		int count2 = 0;
		
		if(n % 5 == 0) {
			count1 = n / 5;
		}
		else if(n % 3 == 0) {
			count1 = n / 3;
		}

		while(n > 0) {
			if(n >= 5) {
				n -= 5;
				count2++;
			}
			
			if(n % 3 != 0 || n == 0) {
				continue;
			}
			
			n -= 3;
			count2++;	
		}
		
		int rslt = -1;
		
		if(count1 == 0) {
			rslt = count2;
		}
		else {
			if(count1 >= 2) {
				rslt = count2;
			}
			else {
				rslt = count1;
			}
		}
		
		System.out.println(rslt);
		
		sc.close();
	}
}

 

일단 이건 틀렸다. 2나 4에서 답이 나오지 않고 무한루프에 빠지는 일이 발생한다.

 

내가 원했던건 

첫번째 5로 나누어지는경우 두번째 3으로 나누어지는경우

하지만 18처럼 3으로 나누어지지만 5 * 3 + 3 * 1도 가능한 경우 계산을 위해서 

while 문안에서 5와 3으로 만들 수 있는 계산을 만들고 싶었다.

하지만 5와 3으로 만드는거 구현하는데에 너무 오래걸렸다...

 

import java.util.Scanner;
public class Q2839 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n;
		n = sc.nextInt();
		
		int rslt = -1;
		int count = 0;
		
		if(n % 5 == 0) {
			rslt = n / 5;
		}
		else if(n > 5) {// 5이하중에서 3을 제외하면 답이 -1이기 때문에
			while(n > 0) {
				if(n % 5 == 0) {
					n -= 5;
					count++;
				}
				else if(n % 3 == 0) {
					n -= 3;
					count++;
				}
				else {
					n -= 5;
					count++;
				}
				if(n < 3) {break;}
			}
			if(n == 0) {rslt = count;}
		}
		else if(n == 3) {rslt = 1;}
		
		System.out.println(rslt);
		
		sc.close();
	}
}

내가 최종 제출한 답은 이것이다. 답이 맞긴 맞는데 이거보다 더 깔끔하게 할 수 없는지 고민...

 

그나저나 다른얘기인데 백준에 자바 제출할때 클래스 이름을 Main으로 해야하는걸 몰랐음 계속 컴파일 에러 나와서 왜그러나 오천번 고민한ㅠㅠㅠㅠ

myoskin