|
| 1 | +package week03.Unoguna; |
| 2 | + |
| 3 | +import java.io.BufferedReader; |
| 4 | +import java.io.IOException; |
| 5 | +import java.io.InputStreamReader; |
| 6 | + |
| 7 | +public class BOJ_2240 { |
| 8 | + |
| 9 | + public static void main(String[] args) throws IOException { |
| 10 | + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); |
| 11 | + StringBuilder sb = new StringBuilder(); |
| 12 | + |
| 13 | + String[] TW = (br.readLine()).split(" "); |
| 14 | + int T = Integer.parseInt(TW[0]); |
| 15 | + int W = Integer.parseInt(TW[1]); |
| 16 | + |
| 17 | + //dp[w][t]에는 자두가 t번 떨어지는 동안 w번 위치를 바꿨을 때 얻을 수 있는 자두의 최대 개수. |
| 18 | + int[][] dp = new int[W + 1][T + 1]; |
| 19 | + |
| 20 | + //t=0인 경우 자두가 한번도 떨어지지 않았기 때문에 + index가 -1이 되기 때문에 고려X |
| 21 | + for(int t = 1; t <= T; t++){ |
| 22 | + int drop_idx = Integer.parseInt(br.readLine()); |
| 23 | + |
| 24 | + //w=0인 경우는 index가 -1이 될 수 있기 때문에 따로 계산 |
| 25 | + if(drop_idx == 1) dp[0][t] = dp[0][t - 1] + 1; //1번 나무에 자두가 떨어짐 |
| 26 | + else dp[0][t] = dp[0][t-1]; //2번 나무에 자두가 떨어짐 |
| 27 | + |
| 28 | + //자두가 t번 떨어졌을 때 자두는 최대 min(t, W)번 움직일 수 있다. |
| 29 | + int max_w=Math.min(t, W); |
| 30 | + for(int w = 1; w <= max_w; w++){ |
| 31 | + //점화식 |
| 32 | + if(drop_idx == 1){ //1번 나무에 자두가 떨어짐 |
| 33 | + if(w%2 == 0){ //자두의 현재 위치에 자두가 떨어질 때 |
| 34 | + dp[w][t] = Math.max(dp[w][t-1], dp[w-1][t-1]) + 1; |
| 35 | + } |
| 36 | + else{ //현재 위치에 자두가 떨어지지 않았을 때 |
| 37 | + dp[w][t] = Math.max(dp[w][t-1], dp[w-1][t-1]); |
| 38 | + } |
| 39 | + } |
| 40 | + else{ //2번 나무에 자두가 떨어짐 |
| 41 | + if(w%2 == 1){ //자두의 현재 위치에 자두가 떨어질 때 |
| 42 | + dp[w][t] = Math.max(dp[w][t-1], dp[w-1][t-1]) + 1; |
| 43 | + } |
| 44 | + else{ //현재 위치에 자두가 떨어지지 않았을 때 |
| 45 | + dp[w][t] = Math.max(dp[w][t-1], dp[w-1][t-1]); |
| 46 | + } |
| 47 | + } |
| 48 | + } |
| 49 | + } |
| 50 | + |
| 51 | + //자두가 다 떨어졌을 때 얻을 수 있는 자두의 최대 개수 계산 |
| 52 | + int answer = 0; |
| 53 | + for(int w=0; w<W+1; w++){ |
| 54 | + answer = Math.max(answer, dp[w][T]); |
| 55 | + } |
| 56 | + |
| 57 | + System.out.println(answer); |
| 58 | + } |
| 59 | +} |
0 commit comments