๐ [๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ ํ์ด] Q.2839 ์คํ๊ณต์ฅ ๋ฌธ์ ํ์ด - ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์
๐ ๋ฌธ์
https://www.acmicpc.net/problem/2839
์๊ทผ์ด๋ ์์ฆ ์คํ๊ณต์ฅ์์ ์คํ์ ๋ฐฐ๋ฌํ๊ณ ์๋ค. ์๊ทผ์ด๋ ์ง๊ธ ์ฌํ๊ฐ๊ฒ์ ์คํ์ ์ ํํ๊ฒ Nํฌ๋ก๊ทธ๋จ์ ๋ฐฐ๋ฌํด์ผ ํ๋ค.
์คํ๊ณต์ฅ์์ ๋ง๋๋ ์คํ์ ๋ด์ง์ ๋ด๊ฒจ์ ธ ์๋ค. ๋ด์ง๋ 3ํฌ๋ก๊ทธ๋จ ๋ด์ง์ 5ํฌ๋ก๊ทธ๋จ ๋ด์ง๊ฐ ์๋ค.
์๊ทผ์ด๋ ๊ท์ฐฎ๊ธฐ ๋๋ฌธ์, ์ต๋ํ ์ ์ ๋ด์ง๋ฅผ ๋ค๊ณ ๊ฐ๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 18ํฌ๋ก๊ทธ๋จ ์คํ์ ๋ฐฐ๋ฌํด์ผ ํ ๋,
3ํฌ๋ก๊ทธ๋จ ๋ด์ง 6๊ฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๋์ง๋ง, 5ํฌ๋ก๊ทธ๋จ 3๊ฐ์ 3ํฌ๋ก๊ทธ๋จ 1๊ฐ๋ฅผ ๋ฐฐ๋ฌํ๋ฉด, ๋ ์ ์ ๊ฐ์์ ๋ด์ง๋ฅผ ๋ฐฐ๋ฌํ ์ ์๋ค.
์๊ทผ์ด๊ฐ ์คํ์ ์ ํํ๊ฒ Nํฌ๋ก๊ทธ๋จ ๋ฐฐ๋ฌํด์ผ ํ ๋, ๋ด์ง ๋ช ๊ฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ฉด ๋๋์ง ๊ทธ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐ ์ ๊ทผ๋ฒ
BOJ Q.2839 ์คํ๊ณต์ฅ ๋ฌธ์ ์
๋๋ค.
๋์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก๋ ํ์ด๊ฐ ๊ฐ๋ฅํ๊ธฐ์
์ด๋ฒ์๋ ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ํ์ด ํด๋ณด๊ฒ ์ต๋๋ค.
Nํฌ๋ก๊ทธ๋จ๊น์ง ๋ชจ๋ MAX ๊ฐ์ผ๋ก ์ด๊ธฐํ๋ฅผ ํด์ค๋๋ค.
i๋ฌด๊ฒ๊น์ง์ ๋ด์ง ๊ฐ์๋ฅผ ์ ์ผ ์ ๊ฒ ํด์ผํ๋ฏ๋ก
i-3๊น์ง์ ๋ด์ง ๊ฐ์ ์ i-5๊น์ง์ ๋ด์ง ๊ฐ์ ์ค
๋ ์ ์ ๋ด์ง ๊ฐ์์ 3kg ์ง๋ฆฌ ๋๋ 5kg์ง๋ฆฌ ๋ด์ง ํ๋๋ฅผ
์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
d[i] = MIN (d[i-3],d[i-5] +1
i-3 , i-5 ๋ชจ๋ MAX ๊ฐ์ด๋ผ๋ฉด ๋ถ๊ฐ๋ฅํ ์กฐํฉ์
๋๋ค.
d[i]์
MAX๋ก ๋จ์์๋ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅํ ์กฐํฉ์ด๊ณ
๊ทธ ์ธ๋ ๊ฐ๋ฅํ ์ ์ผ ์ ์ ๋ด์ง ๊ฐ์๊ฐ ์ ์ฅ๋ฉ๋๋ค.
๐ป ์ฝ๋
package problem.dynamic;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main_2839 {
static int N;
static int d[];
static final int MAX = 5001;
public static void main(String[] args) throws IOException {
input();
int result = solve();
if(result==MAX){
result= -1;
}
System.out.println(result);
}
public static int solve(){
for(int i=0; i<=N; i++){
d[i] = MAX;
}
d[3] = 1;
d[5] = 1;
for(int i=5; i<=N; i++){
if(d[i-3]== MAX && d[i-5]== MAX) {
continue;
}
d[i] = Math.min(d[i-3],d[i-5])+1;
}
return d[N];
}
public static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
d = new int[MAX];
br.close();
}
}