[백준]2839_설탕 배달

Posted by 열정보이
2019. 4. 28. 19:26 Algorithms

다시 알고리즘 공부를 꾸준히 하기 위해 이전에 틀렸던 문제를 보았다.

다시 풀려고 노력했지만 여전히 어렵게 느껴졌다...

 

이 문제 같은 경우는 "입력된 N의 값이 5*X + 3*Y 와 같은 형태" 로 구성되는지 확인하면 되는 문제이다. 

 

그리고 X+Y를 Return하면 문제는 쉽게 끝!!

코드를 보도록 하자.

 

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

public class Al2839 {
	public static void main(String[] args) throws NumberFormatException, IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
	
		/* 5*X + 3*0 의 경우 */
		if(N % 5 == 0){
			System.out.println(N/5);
			return;
		}
		/* 5*X + 3*Y 의 경우 */
		else{
			int val = N / 5;
			for (int i = val; i > 0; i--) {
				int temp = N - (5 * i);
				if(temp % 3 == 0){
					System.out.println(i + (temp/3));
					return;
				}
			}
			/* 5*0 + 3*Y 의 경우 */
			if(N % 3 == 0){
				System.out.println(N/3);
			}
			/* 불가능 */
			else{
				System.out.println("-1");
			}
			return;
		}
	}
}

 

문제에서는 "최소한의 설탕 봉지" 를 원하기 때문에 주어진 3과 5중 "5의 배수가 있는지 파악" 한다.

그리고 "N의 값이 5의 배수가 아닐 경우에는 5X+3Y의 형태" 를 띄는지 확인한다.

 

5X+3Y 는 N을 가능한 만큼의 5X의 값을 뺀 값이 3Y의 형태인지 판단한다.

그 이후에는 "3의 배수인지 확인" 하고, 그리고도 return 되지 않는 값은 3과 5로 만들 수 없는 수로 -1을 출력한다.

 

열심히 하자...!