diff --git a/workbook_7319/gold/2240-g4.py b/workbook_7319/gold/2240-g4.py new file mode 100644 index 0000000..9da2cfd --- /dev/null +++ b/workbook_7319/gold/2240-g4.py @@ -0,0 +1,48 @@ +# 자두나무 + +import sys + +input = sys.stdin.readline + +def solution(): + t, w = map(int, input().rstrip().split()) + + plum = [0] * (t+1) + for i in range(1, t+1): + plum[i] = int(input().rstrip()) + + dp = [[0] * (t+1) for _ in range(w+1)] + + for i in range(1, t+1): + dp[0][i] = dp[0][i-1] + if plum[i] == 1: + dp[0][i] += 1 + + for i in range(1, w+1): + for j in range(1, t+1): + dp[i][j] = max(dp[i][j-1], dp[i-1][j-1]) + if (plum[j] == 1 and i%2 == 0) or (plum[j] == 2 and i%2 == 1): + dp[i][j] += 1 + + + result = 0 + for i in range(w+1): + result = max(result, dp[i][t]) + + print(result) + + return + + +solution() + +""" +걸린 시간: 40분 + +시간 복잡도: w*t의 테이블을 채워야 하기 때문에 O(w*t)이다. + +해설: 현재의 상황은 몇번째 이동한 상황인지로 나뉘고, w만큼 이동했을 때 t초의 상황은 이번에 움직였거나, 이번에 안 움직였거나이다. +따라서 dp[w][t] = max(dp[w][t-1], dp[w-1][t-1]) 이다. +이때, w가 홀수면 2번, 짝수면 1번 나무에 있는 것이므로 t초에 떨어질 나무와 w의 홀짝 여부가 맞으면 +1을 해줘야한다. +그리고 t초의 최대값은 이동을 얼마나 했을 때인지 모르기 때문에 마지막에 t초의 전체 w에 대해 최대값을 구해야한다. +""" \ No newline at end of file