여니의 취준 준비/코딩테스트 (Java)

[2839] 설탕 배달 in Java

여니's 2022. 8. 11. 13:29

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

 

2839번: 설탕 배달

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

www.acmicpc.net


문제 요약

N킬로그램을 배달해야 한다. 봉지의 수는 최소개수여야함.
봉지 종류 : 3킬로그램, 5킬로그램

 

 

접근 방식 및 시행착오

- 처음에 생각했던 방식은 예외 상황이 있는 케이스였다.

n을 5로 나눴을 때의 나머지가 3이라면 유효한 값이 나오고

그게 아니라면 -1을 나오게끔 처리했다.

 

그랬더니 예를 들어 19라는 숫자에서 오류가 발생했다.

19를 5로 나눈 나머지는 4이다.

위에 짠 코드대로라면 -1이 나와야한다.

하지만 실제값은 5kg 짜리 2개, 3kg짜리 3개, 총 5개

즉 5를 출력해야 한다.

 

그래서 3의 배수를 5로 나눠보았다.

 

그랬더니 [3,1,4,2,0]이라는 숫자가 계속 반복된다는 것을 확인했다.

 

1) 5로 나눈 나머지가 1일 때

5kg 봉지 개수는 (n/5)-1개

3kg 봉지 개수는 2개

= (n/5)-1+2 = (n/5)+1

 

 

2) 5로 나눈 나머지가 3일 때

5kg 봉지 개수는 (n/5)개

3kg 봉지 개수는 1개

= (n/5)+1

 

 

 

3) 5로 나눈 나머지가 4일 때

5kg 봉지 개수는 (n/5)-1개

3kg 봉지 개수는 3개

= (n/5)-1+3 = (n/5)+2

 

 

4) 5로 나눈 나머지가 2일 때

5kg 봉지 개수는 (n/5)-2개

3kg 봉지 개수는 4개

= (n/5)-2+4 = (n/5)+2

 

 

그리고 n==4이거나 n==7일때에는

-1을 출력하면 된다!

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package day_0811;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class n2839 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n= Integer.parseInt(br.readLine());
        int answer=0;
        if (n==4 || n==7) {
            System.out.println(-1);
        }
        else if (n%5==0) {
            System.out.println(n/5);
        }else if(n%5==1 || n%5==3) {
            System.out.println((n/5)-1+2);
        }else if(n%5==4 || n%5==2) {
            System.out.println((n/5)+2);
        }        
    }
}
cs