import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Inet4Address;
import java.util.*;
import static java.util.Collections.*;
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[] dp = new int[N+1];
Arrays.fill(dp,5000);
dp[0] = 0;
for (int i = 1 ; i <= N; i++)
{
if (i>=3) dp[i] = Math.min(dp[i],dp[i-3]+1);
if (i>=5) dp[i] = Math.min(dp[i],dp[i-5]+1);
}
if (dp[N] == 5000)
{
System.out.println(-1);
return;
}
System.out.println(dp[N]);
}
}
이번엔 DP로 풀어보았다. 내 기준에서는 훨씬 직관적인 것 같다. 1회차보다.
맨 처음에 보든 배열에 5000이라는 값을 넣은 후 DP의 값을 그 후에 넣는다. 만약 DP의 값이 5000이면 값이 배정이 안된 것이므로 -1을 출력한다.