[BOJ] 2240. ์ž๋‘๋‚˜๋ฌด (๐Ÿฅ‡, DP)

lemythe423ยท2023๋…„ 10์›” 14์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
68/133
post-thumbnail

ํ’€์ด

์ž๋‘๋‚˜๋ฌด๊ฐ€ 2๊ฐœ ์žˆ์„ ๋•Œ ์ตœ๋Œ€ W๊นŒ์ง€ ๋‘˜ ์‚ฌ์ด๋ฅผ ์˜ค๊ณ ๊ฐ€๋ฉด์„œ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ž๋‘๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ์˜ ์˜ˆ์ œ๋ฅผ ๋ณด๊ณ  ์ง๊ด€์ ์œผ๋กœ ๊ตฌํ•ด๋ณด๋ฉด ์ฒ˜์Œ์—๋Š” 1๋ฒˆ ์ž๋‘๋‚˜๋ฌด ์œ„์น˜์— ๊ทธ๋Œ€๋กœ ์„œ ์žˆ๋Š”๋‹ค. ๋น„๋ก 2๋ฒˆ ์ž๋‘๋‚˜๋ฌด์—์„œ ๋–จ์–ด์ง€๊ธด ํ•˜์ง€๋งŒ ๊ทธ ๋’ค์˜ 2,3๋ฒˆ ์งธ ์ž๋‘๊ฐ€ 1๋ฒˆ์—์„œ ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ 2๋ฒˆ ์ž๋‘๋‚˜๋ฌด๋กœ ์œ„์น˜๋ฅผ ํ•œ ๋ฒˆ ์˜ฎ๊ธด๋‹ค. ์ด์ œ 2๋ฒˆ ์ž๋‘๋‚˜๋ฌด์˜ ์ž๋‘ 2๊ฐœ๋ฅผ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ 1๋ฒˆ ์ž๋‘๋‚˜๋ฌด๋กœ ์œ„์น˜๋ฅผ ์˜ฎ๊ธด๋‹ค. ์ด์ œ ์ž๋‘๋ฅผ ์ตœ๋Œ€ 6๊ฐœ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๋ช‡ ๋ฒˆ์งธ์— ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š๋ƒ์— ๋”ฐ๋ผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ž๋‘์˜ ๊ฐœ์ˆ˜๋Š” ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์ผ ํ•œ ๋ฒˆ๋„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ๊ณ„์† 1๋ฒˆ ์ž๋‘๋‚˜๋ฌด์˜ ์œ„์น˜์— ์žˆ๋‹ค๋ฉด(์‹œ์ž‘์€ 1๋ฒˆ ์ž๋‘๋‚˜๋ฌด์ด๋‹ค) ์ตœ๋Œ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ž๋‘์˜ ๊ฐœ์ˆ˜๋Š” 4๊ฐœ์ผ ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ์ฒ˜์Œ ๋–จ์–ด์ง€๋Š” ์ž๋‘๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ๋ฐ”๋กœ 2๋ฒˆ ์ž๋‘๋‚˜๋ฌด๋กœ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟจ๋‹ค๊ฐ€ ๋‹ค์‹œ 2,3๋ฒˆ ์ž๋‘๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด 1๋ฒˆ์œผ๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋˜๋ฉด ์ตœ๋Œ€ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๋‹ค ์ฑ„์› ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์œ„์น˜๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ  ์ตœ๋Œ€ ์ž๋‘๋Š” 5๊ฐœ๊ฐ€ ๋œ๋‹ค.

๊ฒฐ๊ตญ ์–ธ์ œ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ๊ฒƒ์ธ๊ฐ€๊ฐ€ ์ค‘์š”

๋งŒ์•ฝ ์œ„์น˜๋ฅผ ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ๋ฐ”๊พผ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. 4๋ฒˆ์งธ ์ž๋‘๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ 2๋ฒˆ์œผ๋กœ ์œ„์น˜๋ฅผ ์˜ฎ๊ธฐ๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ๊นŒ์ง€ ์–ป์€ ์ž๋‘๋Š” 1๋ฒˆ ์ž๋‘ 2๊ฐœ์ด๋‹ค. ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‹จ ํ•œ ๋ฒˆ๋„ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ ์ ์ด ์—†๋Š” ์ƒํƒœ๋‹ค. ์—ฌ๊ธฐ์„œ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ฒŒ ๋˜๋ฉด ์ด์ œ ์œ„์น˜ ๋ณ€๊ฒฝ ํšŸ์ˆ˜๊ฐ€ 1๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค.

์™ผ์ชฝ์˜ ํ–‰ ๋ฒˆํ˜ธ๋Š” ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ ํšŸ์ˆ˜, ์—ด ๋ฒˆํ˜ธ๋Š” ๋ช‡ ๋ฒˆ์งธ ์ž๋‘๊ฐ€ ๋–จ์–ด์ง€๋Š”๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. 3๋ฒˆ์งธ๊นŒ์ง€๋Š” ์œ„์น˜๋ฅผ ํ•œ ๋ฒˆ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ 0ํ–‰์— ์žˆ๊ณ , 4๋ฒˆ์งธ ์ž๋‘๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด 1๋ฒˆ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ 1ํ–‰์œผ๋กœ ์˜ฎ๊ธฐ๊ฒŒ ๋œ๋‹ค. ๋ฐฐ์—ด์˜ ๊ฐ’์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค

arr[1][4] = arr[0][3] + 1

์ด๋•Œ ๊ทธ๋ฆผ์—์„œ์ฒ˜๋Ÿผ ์ž๋‘๋ฅผ ์–ป๋Š”๋‹ค๋ฉด 1์ด ์ถ”๊ฐ€๋˜์ง€๋งŒ ์–ป์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค.

์ด์ œ ๋‹ค์‹œ 1๋ฒˆ ์ž๋‘๋‚˜๋ฌด์˜ ์ž๋‘๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด 6๋ฒˆ์งธ์— ์œ„์น˜๋ฅผ ๋‹ค์‹œ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. 2๋ฒˆ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— 2ํ–‰์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋˜๊ณ , 6๋ฒˆ์งธ ํ–‰์œผ๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค. ์œ„์˜ ์‹์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ๋Œ€์ž…ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

arr[2][6] = arr[1][5] + 1

7๋ฒˆ์งธ ์ž๋‘ ์—ญ์‹œ 1๋ฒˆ ์œ„์น˜์—์„œ ๋–จ์–ด์ง€๋ฏ€๋กœ ์ตœ๋Œ€ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋‘ 6๊ฐœ๋Š” ๋งˆ์ง€๋ง‰ ์—ด์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

i๋ฅผ ๋–จ์–ด์ง€๋Š” ์ž๋‘์˜ ๋ฒˆํ˜ธ, j๋ฅผ ๋ฐ”๊พผ ์œ„์น˜์˜ ํšŸ์ˆ˜๋กœ ํ–ˆ์„ ๋•Œ dp๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.

์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์„ ๋•Œ : dp[i][j] = dp[i][j-1]
์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ : dp[i][j] = dp[i-1][j-1]

๊ฐ ์œ„์น˜์—์„œ ์ž๋‘๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด 1์„ ๋”ํ•œ๋‹ค.

# ์ž๋‘๋‚˜๋ฌด

T, W = map(int, input().split())
nums = [int(input()) for _ in range(T)]

rem = 1
dp = [[0]*(T+1) for _ in range(W+1)]
for i in range(1, T+1):
    if nums[i-1]%2 == rem:
        dp[0][i] = dp[0][i-1]+1
    else:
        dp[0][i] = dp[0][i-1]

for i in range(1, W+1):
    rem = (rem+1)%2
    for j in range(i, T+1):
        dp[i][j] = max(dp[i][j-1], dp[i-1][j-1])
        if nums[j-1]%2 == rem:
            dp[i][j] += 1

print(max(list(map(list, zip(*dp)))[-1]))
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€