-
[백준/BOJ] 2839번 : 설탕 배달 (JAVA / 자바)백준 2022. 3. 1. 16:00
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/2839
- 문제 -
난이도 브론즈 1 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
패턴을 찾자.
설탕은 5키로와 3키로가 있다. 입력값을 5로 나눠보자. 나누기 전에 입력값들을 나눴을때 나머지를 볼 건데 5로 나눴을때 올 수 있는 나머지는 총 0~4까지 있다. 여러 경우를 볼 것이다.
5의 배수들이 오면 당연히 5키로만으로 구성하는게 최솟값이다.
나머지가 1인 값들을 보자. 6, 11, 16, 21, 26, ... 이다. 순서대로 3키로 2개, 5키로 1개 + 3키로 2개, 5키로 2개 + 3키로 2개, 5키로 3개 + 3키로 2개, 5키로 4개 + 3키로 2개,.... 이다. 이제 총 개수를 보자. 2, 3, 4, 5, 6, ... 개.
이제 다시 6부터 5로 나눠보자. 6 / 5 =1. 11 / 5 = 2. 3, 4, 5, ... 이렇게 늘어간다. 그렇다면 여기서 알 수 있는 것은 나머지가 1일때는 5로 나눈 값 + 1을 해주면 만들 수 있는 최솟값을 알 수 있다는 것이다. 그렇다면 나머지가 2, 3, 4일때도 비슷한 패턴이 있을 것이다. 다 여기서 계산해주면 편하겠지만 한번은 직접 해보시길 권장한다.
우선 패턴을 직접 말해주겠다. 그전에 3과 5키로의 설탕으로 만들 수 없는 값들이 있다. 4와 7이다. 4와 7이 입력된다면 -1을 출력하자.
나머지가 0일땐 N(입력값) / 5를 해준 값이 최솟값이다.
나머지가 1과 3일땐 (N / 5) + 1을 해준 값이 최솟값이다.
나머지가 2와 4일땐 (N / 5) + 2를 해준 값이 최솟값이다.
코드를 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); 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); }else { System.out.println((N / 5) + 2); } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 4949번 : 균형잡힌 세상 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 2869번 : 달팽이는 올라가고 싶다 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 2805번 : 나무 자르기 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 2798번 : 블랙잭 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 2775번 : 부녀회장이 될테야 (JAVA / 자바) (0) 2022.03.01