Algorithm
[BaekJoon] 백준 알고리즘 2839번 / 설탕 배달
bkuk
2023. 2. 24. 17:39
- 초기에 해당문제를 반복문으로 접근했다가 시간 초과로 인해서 코드를 싹 갈아 엎었다..
- 아래 그림과 같이 입력받은 값을 정수 5로 나눈 값과 나머지값을 확인해서 접근했다.
- 그리디 알고리즘의 접근방법은 우선 큰 봉지로 묶는 것이라고 배웠다.
- 그래서 5로 나눴을 때 발생할 수 있는 경우를 5가지로 나눴고, 아래와 같이 3kg 봉지로 묶을 수 있다.
- 나머지 1의 경우를 잘 보면, 아래에 b5 - 1 - +2 라고 적어놨다. 이 말은 5kg 포장되어있는 것을 풀러서 3kg 봉지로 담는다는 의미이다.
- 각 케이스 별로 정리해 두었다.
- 자, 이제 코드를 보자
- 주의해야할 점은, 포장되어있는 봉지를 확인해야한다는 것이다..
- 나머지가 있어서 포장되어 있는 봉지를 뜯어서 3kg로 그룹화 시켜야하는데.. 없으면 이는 나눌수 없음을 의미한다.
- 따라서 -1을 반환하게 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Number2839 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
int N = Integer.parseInt( br.readLine() );
int b5 = N / 5 ;
int r = N % 5 ;
if( r == 1 && b5 >= 1 ) {
b5 = b5 - 1 + 2;
} else if( r == 2 && b5 >= 2 ) {
b5 = b5 - 2 + 4;
} else if( r == 3 ) {
b5 = b5 + 1;
} else if( r == 4 && b5 >= 1 ) {
b5 = b5 - 1 + 3;
} else if( r == 0 ) {
} else {
b5 = -1;
}
System.out.println( b5 );
}
}