🔺 문제
2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
🔺 코드
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
|
import java.util.*;
import java.io.*;
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());
int cnt = 0;
while(true) {
if(N % 5 == 0) {
cnt += N / 5;
System.out.println(cnt);
break;
}
else {
N -= 3;
cnt++;
}
if(N < 0) {
System.out.println(-1);
break;
}
}
}
}
|
cs |
✅ 해결 아이디어
- 무게가 5로 나눠진다면, 5kg을 이용해 들 수 있는만큼 갯수 더해 출력
- 무게가 5로 나눠지지 않는다면, 여기서 3kg을 빼고 갯수 + 1을 해 반복문을 다시 돌린다.
- 위의 조건식에 부합하지 않고, 무게가 0보다 작다면, 3kg나 5kg 봉지를 이용해 들 수 없으므로 -1 출력.
🔺 다른 풀이들
- 쉽게 푸셨다... wow
백준 2839번 설탕배달 자바(Java)
츄르사려고 코딩하는 코집사입니다. 1. 백준 2839번 설탕배달 자바(Java) 2. 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int bon
yongku.tistory.com
백준 2839번 java 자바 설탕배달 (수학 1)
설탕은 3kg봉지 5kg봉지 가 있는데 n(입력)kg를 배달해야 하고 가장 적은 봉지를 들고가야 하는 알고리즘이다. 뭐 간단하게 5kg로 최대한 들고 가고 남은 것을 3kg로 들고가면 된다고 생각이 된다. 뭐
hellodoor.tistory.com
💬 느낀 점
내가 첨에 생각했던 거는 약간 아래 풀이랑 비슷허다.
[백준] 2839번 : 설탕 배달 - JAVA [자바]
https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만
st-lab.tistory.com
아무튼,,, 괜히 dp 식 세운다고 고민했는데 그럴 필요가 없었던 것이었다,,^^
DP 아니고 그리디 문제 같이 더 느껴져서 암튼,,, 끝..
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 230705 | 240116 | 240630 |
(+ 2회독 240116)
DP 점화식을 사용해 풀어보았다
코드 확인하기
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
32
33
|
import java.util.*;
import java.io.*;
public class Main {
static final int MAX = Integer.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] dp = new int[5001];
Arrays.fill(dp, MAX);
dp[3] = 1;
dp[5] = 1;
if(N <= 5) {
System.out.println(dp[N] == MAX ? -1 : dp[N]);
return;
}
for(int i = 6 ; i <= N ; i++) {
for(int j = 3 ; j <= N - 3 ; j++) {
if(dp[j] != MAX && dp[i - j] != MAX) {
dp[i] = Math.min(dp[i], dp[i - j] + dp[j]);
}
}
}
System.out.println(dp[N] == MAX ? -1 : dp[N]);
}
}
|
cs |
(+3회독 240630 14296KB, 152ms)
코드 확인하기
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
|
import java.util.*;
import java.io.*;
public class Main {
static int MAX = Integer.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] dp = new int[5001];
Arrays.fill(dp, MAX);
dp[3] = 1;
dp[5] = 1;
for(int i = 3 ; i <= N ; i++) {
for(int x = 1 ; x <= i/2 ; x++) {
if(dp[x] != MAX && dp[i-x] != MAX)
dp[i] = Math.min(dp[i], dp[x] + dp[i-x]);
}
}
System.out.println(dp[N] == MAX ? -1 : dp[N]);
}
}
|
cs |
(참고)
✔ 쉬운 풀이 짱,,,
백준 2839번 설탕배달 자바(Java)
츄르사려고 코딩하는 코집사입니다. 1. 백준 2839번 설탕배달 자바(Java) 2. 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int bon
yongku.tistory.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 11727번: 2×n 타일링 2 (0) | 2023.06.07 |
---|---|
[백준/JAVA] 2748번: 피보나치 수 2 (0) | 2023.06.06 |
[백준/JAVA] 1003번: 피보나치 함수 (1) | 2023.06.06 |
[백준/JAVA] 15655번: N과 M (6) (1) | 2023.06.06 |
[백준/JAVA] 15654번: N과 M (5) (0) | 2023.06.05 |