일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- SSAFY 테스트
- SSAFY 화이팅
- 자고 싶다
- Java 환경 설정
- 코로나 싫어요
- I am Korean
- have a nice day
- amazon
- 텐션 업 10기!
- DFS
- 수학
- 네트워크
- 텐션 업 10기 화이팅
- DP
- 우유가옆으로넘어지면아야
- SSAFY IM/A
- 우유아야
- Have a good day :)
- 우유가 옆으로 넘어지면 아야
- Have a nice day.
- 자료구조
- 아자아자 화이팅
- HAVE A GOOD DAY
- BFS
- 모르고리즘
- Hamming weight
- SSAFY 10기 화이팅
- SeongSeobDang
- Today
- Total
Hope Everyone Is Happy
[실버 4] 2839. 설탕 배달 / DP (Java) 본문
[실버 4] 2839. 설탕 배달 / DP (Java)
J 크 2023. 10. 3. 22:24https://www.acmicpc.net/problem/2839
2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
쇠주 배달 시급
※ 문제를 요약하면 아래와 같습니다.
▶ 상근 씨가 N 킬로그램의 설탕을 배달
▶ 봉지는 3kg, 5kg 두가지의 종류가 존재
▶ 상근씨는 최대한 적은 봉지를 사용하고 싶음
▶ 입력으로 설탕 N kg의 값이 주어짐
▶ 최소로 사용한 봉지 수 출력, 정확하게 N kg을 만들 수 없다면 -1 출력
◈ Input - 1
18
◈ Output - 1 ( 3 + 5 + 5 + 5 )
4
◈ Input - 2
4
◈ Output - 2 ( 3 or 5로 구성할 수 없음 )
-1
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ https://heih.tistory.com/40 풀이를 DP로 변경하여 풀이
1. 5로 나누어 떨어질 경우 DP 배열에서 현재 인덱스 -5 배열의 값에 1을 더하여 저장
2. 1번의 경우가 아니고, 3으로 나누어 떨어질 경우 DP 배열에서 현재 인덱스 -3 배열의 값에 1을 더하여 저장
3. 1,2번의 경우가 아니고, i가 5보다 크며 현재 인덱스-3번째의 dp값이 0이 아닐경우,
현재 인덱스의 -3번째 배열과 -5번째 배열의 dp값이 일치하면 해당 dp값에 1을 더하여 현재 인덱스에 저장
4. 입력된 N의 값이 0일 경우 -1 출력
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(bReader.readLine());
int[] narrDP = new int[N + 1];
for (int i = 1; i <= N; i++) {
if (i % 5 == 0)
narrDP[i] = narrDP[i - 5] + 1;
else if (i % 3 == 0)
narrDP[i] = narrDP[i - 3] + 1;
else if (i >= 5 && narrDP[i - 3] != 0 && narrDP[i - 3] == narrDP[i - 5])
narrDP[i] = narrDP[i - 3] + 1;
}
if (narrDP[N] == 0)
bWriter.write("-1");
else
bWriter.write(String.valueOf(narrDP[N]));
bWriter.close();
}
}
Good Luck! (피드백 감사합니다!)
'※ 백준 (Baekjoon) > [Java] 문제 풀이 ( Solve the problems)' 카테고리의 다른 글
[골드4] 17281. ⚾ (Java) (2) | 2023.10.04 |
---|---|
[골드5] 2293. 동전 1(Java) (2) | 2023.10.03 |
[골드2] 17136. 색종이 붙이기(Java) (2) | 2023.10.03 |
[실버1] 14888. 연산자 끼워넣기(Java) (0) | 2023.10.03 |
[골드3] 17135. 캐슬 디펜스(Java) (0) | 2023.09.28 |