Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 2240. ์ž๋‘๋‚˜๋ฌด

deo2kim 2020. 9. 3. 08:57
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

 S1 | ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

1.  ๋‹ต์€ X์ดˆ์— Y๋ฒˆ ์›€์ง์—ฌ์„œ ๋จน์€ ์ตœ๋Œ€์˜ ์ž๋‘ ๊ฐฏ์ˆ˜! ๋ณ€์ˆ˜๊ฐ€ 2๊ฐœ์ด๋‹ˆ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.
๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ๋‹ต์„ ๋ณด๋ฉด ์ž๋‘(์‚ฌ๋žŒ ํ—ท๊ฐˆ๋ฆผ)์˜ ์œ„์น˜๊นŒ์ง€ ์ €์žฅํ•˜์—ฌ 3์ฐจ์›์œผ๋กœ ๋งŒ๋“ ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋™ ํšŸ์ˆ˜์— ๋”ฐ๋ผ ์ž๋‘(์‚ฌ๋žŒ)์˜ ์œ„์น˜๋Š” ์ €์ ˆ๋กœ ์ •ํ•ด์ง„๋‹ค.
ํ™€์ˆ˜๋ฒˆ ์›€์ง์ด๋ฉด 2๋ฒˆ ๋‚˜๋ฌด์—, ์ง์ˆ˜๋ฒˆ ์›€์ง์ด๋ฉด 1๋ฒˆ ๋‚˜๋ฌด์— ์žˆ๋‹ค.

 

2. ํ–‰์„ ์ดˆ(0~์ž๋‘๊ฐฏ์ˆ˜) ์—ด์„ ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ํšŸ์ˆ˜(0~W) ๋งŒํผ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

dp์˜ 0๋ฒˆ์งธ ํ–‰์€ 0์ดˆ๋•Œ, 0๋ฒˆ์งธ ์—ด์€ ์›€์ง์ด์ง€ ์•Š์•˜์„ ๋•Œ

 

3. %์ค‘์š”%

 (1) ๋ฐ›์•„ ๋จน๋Š” ์กฐ๊ฑด:

  a. i์ดˆ์— ์ž๋‘๊ฐ€ 1๋ฒˆ์—์„œ ๋–จ์–ด์ง€๊ณ  ์ด๋™ ํšŸ์ˆ˜๊ฐ€ ์ง์ˆ˜(j % 2 == 0, 1๋ฒˆ ๋‚˜๋ฌด์— ์œ„์น˜)ํ•˜๋ฉด

  b. i์ดˆ์— ์ž๋‘๊ฐ€ 2๋ฒˆ์—์„œ ๋–จ์–ด์ง€๊ณ  ์ด๋™ ํšŸ์ˆ˜๊ฐ€ ํ™€์ˆ˜(j % 2 == 1, 2๋ฒˆ ๋‚˜๋ฌด์— ์œ„์น˜)ํ•˜๋ฉด
 i-1์ดˆ ๋•Œ j๋ฒˆ ์งธ ์œ„์น˜์˜ ์ž๋‘ ์ˆ˜์™€ i-1์ดˆ ๋•Œ j-1๋ฒˆ ์งธ ์œ„์น˜์˜ ์ž๋‘ ์ˆ˜ ์ค‘ ํฐ ๊ฐ’์— + 1ํ•˜์—ฌ dp[i][j]๋ฅผ ์ฑ„์šด๋‹ค.

  (2) ์•ˆ ๋จน๋Š” ์กฐ๊ฑด:

  a. i์ดˆ์— ์ž๋‘์™€ ์ž๋‘(์‚ฌ๋žŒ)์ด ์—‡๊ฐˆ๋ฆด ๋•Œ

 i-1์ดˆ ๋•Œ j-1, j ๋ฒˆ ์งธ์˜ max๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค DP

๐Ÿ’จ DP๋Š” ์ ํ™”์‹์„ ์„ธ์šฐ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค!

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

import sys
if __name__ == "__main__":
    T, W = map(int, input().split())
    plums = [0]
    for i in range(T):
        plums.append(int(sys.stdin.readline()))

    dp = [[0]*(W+1) for _ in range(T+1)]

    for i in range(1, T+1):
        # ํ•œ๋ฒˆ๋„ ์›€์ง์ด์ง€ ์•Š์•˜์„ ๋•Œ(dp[i][0]์„ ์ฑ„์šฐ๋Š” ๊ณผ์ •)
        if plums[i] == 1:  # ์ž๋‘๊ฐ€ 1๋ฒˆ์—์„œ ๋–จ์–ด์งˆ ๋•Œ๋งŒ ๋ฐ›์•„ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค.
            dp[i][0] = dp[i-1][0] + 1  
        else:  
            dp[i][0] = dp[i-1][0]   

        # ์ด๋™ ํšŸ์ˆ˜๋ฅผ 1๋ฒˆ๋ถ€ํ„ฐ W ๋ฒˆ๊นŒ์ง€ ์›€์ง์ด๋ฉด์„œ ์ฒดํฌ
        for j in range(1, W+1):
            if j > i:
                break
                
            # ์ž๋‘๊ฐ€ 1๋ฒˆ์—์„œ ๋–จ์–ด์ง€๊ณ , ๊ทธ๊ฒƒ์„ ๋ฐ›์•„ ๋จน๊ธฐ
            if plums[i] == 1 and j % 2 == 0:
                # ์›€์ง์—ฌ์„œ ๋ฐ›์•„๋จน์„ ๊ฒƒ์ธ๊ฐ€, ํ˜„์žฌ์œ„์น˜์—์„œ ๋ฐ›์•„๋จน์„ ๊ฒƒ์ธ๊ฐ€
                # ์–ด์งœํ”ผ ์ด๋™ํ•œ ํšŸ์ˆ˜๋Š” ๊ฐ™๋‹ค(์ง€๊ธˆ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์ด์ „์— ์ด๋™ํ–ˆ๊ฑฐ๋‚˜)
                dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + 1

            # ์ž๋‘๊ฐ€ 2๋ฒˆ์—์„œ ๋–จ์–ด์ง€๊ณ , ๊ทธ๊ฒƒ์„ ๋ฐ›์•„ ๋จน๊ธฐ
            elif plums[i] == 2 and j % 2 == 1:
                dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + 1
                
            # ๊ทธ ์™ธ - ์•ˆ๋จน๋Š”๋‹ค - ๊ทธ๋Œ€๋กœ ์žˆ๊ฑฐ๋‚˜ ์›€์ง์—ฌ์„œ ์•ˆ๋จน์Œ
            else:
                dp[i][j] = max(dp[i-1][j], dp[i-1][j-1])

    print(max(dp[-1]))


 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/2240

 

2240๋ฒˆ: ์ž๋‘๋‚˜๋ฌด

์ž๋‘๋Š” ์ž๋‘๋ฅผ ์ข‹์•„ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ง‘์— ์ž๋‘๋‚˜๋ฌด๋ฅผ ์‹ฌ์–ด๋‘๊ณ , ์—ฌ๊ธฐ์„œ ์—ด๋ฆฌ๋Š” ์ž๋‘๋ฅผ ๋จน๊ณ ๋Š” ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋‘๋Š” ํ‚ค๊ฐ€ ์ž‘์•„์„œ ์ž๋‘๋ฅผ ๋”ฐ๋จน์ง€๋Š” ๋ชปํ•˜๊ณ , ์ž๋‘๊ฐ€ ๋–จ์–ด์งˆ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ์— ๋–จ์–ด

www.acmicpc.net




๋ฌธ์ œ

์ž๋‘๋Š” ์ž๋‘๋ฅผ ์ข‹์•„ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ง‘์— ์ž๋‘๋‚˜๋ฌด๋ฅผ ์‹ฌ์–ด๋‘๊ณ , ์—ฌ๊ธฐ์„œ ์—ด๋ฆฌ๋Š” ์ž๋‘๋ฅผ ๋จน๊ณ ๋Š” ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋‘๋Š” ํ‚ค๊ฐ€ ์ž‘์•„์„œ ์ž๋‘๋ฅผ ๋”ฐ๋จน์ง€๋Š” ๋ชปํ•˜๊ณ , ์ž๋‘๊ฐ€ ๋–จ์–ด์งˆ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ์— ๋–จ์–ด์ง€๋Š” ์ž๋‘๋ฅผ ๋ฐ›์•„์„œ ๋จน๊ณ ๋Š” ํ•œ๋‹ค. ์ž๋‘๋ฅผ ์žก์„ ๋•Œ์—๋Š” ์ž๋‘๊ฐ€ ํ—ˆ๊ณต์— ์žˆ์„ ๋•Œ ์žก์•„์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ์ž๋‘๊ฐ€ ๋ง๋ž‘๋ง๋ž‘ํ•˜์—ฌ ๋ฐ”๋‹ฅ์— ๋–จ์–ด์ง€๋ฉด ๋ชป ๋จน์„ ์ •๋„๋กœ ๋ญ‰๊ฐœ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งค ์ดˆ๋งˆ๋‹ค, ๋‘ ๊ฐœ์˜ ๋‚˜๋ฌด ์ค‘ ํ•˜๋‚˜์˜ ๋‚˜๋ฌด์—์„œ ์—ด๋งค๊ฐ€ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ ์—ด๋งค๊ฐ€ ๋–จ์–ด์ง€๋Š” ์ˆœ๊ฐ„, ์ž๋‘๊ฐ€ ๊ทธ ๋‚˜๋ฌด์˜ ์•„๋ž˜์— ์„œ ์žˆ์œผ๋ฉด ์ž๋‘๋Š” ๊ทธ ์—ด๋งค๋ฅผ ๋ฐ›์•„๋จน์„ ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋‚˜๋ฌด๋Š” ๊ทธ๋‹ค์ง€ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ž๋‘๋Š” ํ•˜๋‚˜์˜ ๋‚˜๋ฌด ์•„๋ž˜์— ์„œ ์žˆ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ๋‚˜๋ฌด ์•„๋ž˜๋กœ ๋น ๋ฅด๊ฒŒ(1์ดˆ๋ณด๋‹ค ํ›จ์”ฌ ์งง์€ ์‹œ๊ฐ„์—) ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋‘๋Š” ์ฒด๋ ฅ์ด ๊ทธ๋‹ค์ง€ ์ข‹์ง€ ๋ชปํ•ด์„œ ๋งŽ์ด ์›€์ง์ผ ์ˆ˜๋Š” ์—†๋‹ค.

์ž๋‘๋Š” T(1โ‰คTโ‰ค1,000)์ดˆ ๋™์•ˆ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ž๋‘๋Š” ์ตœ๋Œ€ W(1โ‰คWโ‰ค30)๋ฒˆ๋งŒ ์›€์ง์ด๊ณ  ์‹ถ์–ด ํ•œ๋‹ค. ๋งค ์ดˆ๋งˆ๋‹ค ์–ด๋А ๋‚˜๋ฌด์—์„œ ์ž๋‘๊ฐ€ ๋–จ์–ด์งˆ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ž๋‘๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ž๋‘์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž๋‘๋Š” 1๋ฒˆ ์ž๋‘๋‚˜๋ฌด ์•„๋ž˜์— ์œ„์น˜ํ•ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ T, W๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ T๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ˆœ๊ฐ„์— ์ž๋‘๊ฐ€ ๋–จ์–ด์ง€๋Š” ๋‚˜๋ฌด์˜ ๋ฒˆํ˜ธ๊ฐ€ 1 ๋˜๋Š” 2๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ž๋‘๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ž๋‘์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€์ˆ˜0