ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

5557๋ฒˆ: 1ํ•™๋…„

์ƒ๊ทผ์ด๊ฐ€ 1ํ•™๋…„ ๋•Œ, ๋ง์…ˆ, ๋บ„์…ˆ์„ ๋งค์šฐ ์ข‹์•„ํ–ˆ๋‹ค. ์ƒ๊ทผ์ด๋Š” ์ˆซ์ž๊ฐ€ ์ค„ ์ง€์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณด๊ธฐ๋งŒ ํ•˜๋ฉด, ๋งˆ์ง€๋ง‰ ๋‘ ์ˆซ์ž ์‚ฌ์ด์— '='์„ ๋„ฃ๊ณ , ๋‚˜๋จธ์ง€ ์ˆซ์ž ์‚ฌ์ด์—๋Š” '+' ๋˜๋Š” '-'๋ฅผ ๋„ฃ์–ด ๋“ฑ์‹์„ ๋งŒ๋“ค๋ฉฐ ๋†€๏ฟฝ๏ฟฝ

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์ˆซ์ž๊ฐ€ ์ฃผ์–ด ์งˆ ๋•Œ, +, - ๋ฅผ ํ†ตํ•ด ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณ„์‚ฐ๋œ ์ˆซ์ž์˜ ๋ฒ”์œ„๋Š” 0 ๋ณด๋‹ค ํฌ๊ณ , 20 ๋ณด๋‹ค ์ž‘์•„์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ, ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฃผ์–ด์ง„ ์ˆซ์ž์™€ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ์ œ ์ž…๋ ฅ1์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ์˜ ์ฃผ์–ด์ง„ ํžŒํŠธ์™€ ๊ฐ™์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

  • 8+3-2-4+8-7-2-4-0+8=8
  • 8+3-2-4+8-7-2-4+0+8=8
  • 8+3+2+4-8-7+2-4-0+8=8
  • 8+3+2+4-8-7+2-4+0+8=8
  • 8+3+2-4+8-7+2+4-0-8=8
  • 8+3+2-4+8-7+2+4+0-8=8
  • 8-3+2+4-8+7+2+4-0-8=8
  • 8-3+2+4-8+7+2+4+0-8=8
  • 8-3+2-4+8+7+2-4-0-8=8
  • 8-3+2-4+8+7+2-4+0-8=8

 ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” DFS๋ฅผ ํ†ตํ•ด ๊ตฌํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, 2์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ DP๋กœ ํ’€์ˆ˜๋„ ์žˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋Š” ์ด์ „์— ๋‹ค๋ฃฌ

๊ธฐํƒ€๋ฆฌ์ŠคํŠธ์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ’€๋ฉด ๋œ๋‹ค. ๋‹ค๋งŒ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ์˜ˆ์ œ ์ž…๋ ฅ 1์˜ ๊ฒฝ์šฐ 8์ด๋ผ๋Š” ๊ฐ’์ด ๋‚˜์˜ค๋Š” ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•˜์˜€์„ ๋•Œ, 8์ด ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์ค‘์ฒฉํ•˜๋ฉด์„œ ์ฒดํฌํ•ด์•ผ ํ•œ๋‹ค.

 

'''
7 
8 3 2 4 8 7 2 
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0] 
[0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0] 
[0, 0, 1, 0, 1, 0, 1, 0, 2, 0, 2, 0, 2, 0, 0, 0, 1, 0, 1, 0, 1]
'''

 ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด, 2์ฐจ์› ๋ฐฐ์—ด์— ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๋“ค์ด ํ‘œ์‹œ๋  ๊ฒƒ์ด๊ณ , 2๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1๊ฐœ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ 8, 10, 12๊ฐ€ ๋œ๋‹ค๋ฉด 2๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด์™€ ๊ฐ™์ด ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ํƒ์ƒ‰์ด ๋œ๋‹ค๋ฉด DFS๋ฅผ ํ†ตํ•ด ํ’€์ง€ ์•Š๊ณ  2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


if __name__ == "__main__":
    n = int(stdin.readline())
    nums = list(map(int, stdin.readline().split()))
    dp = [[0] * 21 for _ in range(n - 1)]
    dp[0][nums[0]] = 1

    for i in range(1, n - 1):
        cur_num = nums[i]

        for j in range(21):
            if not dp[i - 1][j]:
                continue

            if j + cur_num <= 20:
                dp[i][j + cur_num] += dp[i - 1][j]

            if 0 <= j - cur_num:
                dp[i][j - cur_num] += dp[i - 1][j]

    print(dp[-1][nums[-1]])
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€