https://www.acmicpc.net/problem/2839
문제 요약
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 |
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[*16637*] 괄호 추가하기 in Java (0) | 2022.08.11 |
---|---|
[1074] Z in Java (0) | 2022.08.11 |
[17070] 파이프 옮기기 1 in Java (0) | 2022.08.10 |
[1010] 다리 놓기 in Java (0) | 2022.08.10 |
[16935] 배열 돌리기 3 in Java (0) | 2022.08.10 |