Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 9084. ๋™์ „

deo2kim 2020. 9. 2. 08:03
๋ฐ˜์‘ํ˜•

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

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

2. target(๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก)์˜ ๊ธธ์ด๋งŒํผ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

3. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋™์ „์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๊บผ๋‚ด์„œ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค(๋‚ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก)๊ณผ ๋น„๊ตํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉด ์นด์šดํŠธ๋ฅผ ์„ธ์–ด์ค€๋‹ค. 

4. ์œ„์˜ ํ‘œ ์ฒ˜๋Ÿผ ๊ฐ ๋™์ „์„ ๊บผ๋ƒˆ์„ ๋•Œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ๊ธˆ์•ก(์ธ๋ฑ์Šค)์— ๊บผ๋‚ธ ๋™์ „์„ ๋”ํ•ด์„œ ๊ฐ’์„ ์Œ“๋Š”๋‹ค.

๐Ÿ’จ ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•œ๋ฒˆ ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ๋Š” ๋‹ค์‹œ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๋Š” ์˜๋ฏธ!!!!!!!!! DP๋Š” ํ•ญ์ƒ ์–ด๋ ต๋‹ค....

 

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

def _dp():
    dp = [0] * (target + 1)  # ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋ฆฌ์ŠคํŠธ
    dp[0] = 1

    for coin in coins:
        # print('๊บผ๋‚ธ ๋™์ „: ',coin)
        for i in range(1, target + 1):
            # coin(๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋™์ „)์ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก(i)๋ณด๋‹ค ํฌ์ง€ ์•Š์„ ๋•Œ
            if i - coin >= 0:
                dp[i] += dp[i - coin]
        # print('dp: ',dp)

    print(dp[-1])


if __name__ == "__main__":
    T = int(input())
    for tc in range(1, T+1):
        N = int(input())  # ๋™์ „์˜ ๊ฐ€์ง€ ์ˆ˜ <20
        coins = list(map(int, input().split()))  # ๋™์ „์˜ ์ข…๋ฅ˜
        target = int(input())  # ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ธˆ์•ก
        _dp()

 

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

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

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

 

9084๋ฒˆ: ๋™์ „

์šฐ๋ฆฌ๋‚˜๋ผ ํ™”ํ๋‹จ์œ„, ํŠนํžˆ ๋™์ „์—๋Š” 1์›, 5์›, 10์›, 50์›, 100์›, 500์›์ด ์žˆ๋‹ค. ์ด ๋™์ „๋“ค๋กœ๋Š” ์ •์ˆ˜์˜ ๊ธˆ์•ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋ฐฉ๋ฒ•๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 30์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š”

www.acmicpc.net




๋ฌธ์ œ

์šฐ๋ฆฌ๋‚˜๋ผ ํ™”ํ๋‹จ์œ„, ํŠนํžˆ ๋™์ „์—๋Š” 1์›, 5์›, 10์›, 50์›, 100์›, 500์›์ด ์žˆ๋‹ค. ์ด ๋™์ „๋“ค๋กœ๋Š” ์ •์ˆ˜์˜ ๊ธˆ์•ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋ฐฉ๋ฒ•๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 30์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” 1์›์งœ๋ฆฌ 30๊ฐœ ๋˜๋Š” 10์›์งœ๋ฆฌ 2๊ฐœ์™€ 5์›์งœ๋ฆฌ 2๊ฐœ ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋™์ „์˜ ์ข…๋ฅ˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ์— ์ฃผ์–ด์ง„ ๊ธˆ์•ก์„ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ์„ธ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T(1 ≤ T ≤ 10)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋™์ „์˜ ๊ฐ€์ง€ ์ˆ˜ N(1 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” N๊ฐ€์ง€ ๋™์ „์˜ ๊ฐ ๊ธˆ์•ก์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๊ธˆ์•ก์€ ์ •์ˆ˜๋กœ์„œ 1์›๋ถ€ํ„ฐ 10000์›๊นŒ์ง€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ์„ธ ๋ฒˆ์งธ ์ค„์—๋Š” ์ฃผ์–ด์ง„ N๊ฐ€์ง€ ๋™์ „์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ธˆ์•ก M(1 ≤ M ≤ 10000)์ด ์ฃผ์–ด์ง„๋‹ค.

ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” 231 - 1 ๋ณด๋‹ค ์ž‘๊ณ , ๊ฐ™์€ ๋™์ „์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” N๊ฐ€์ง€ ๋™์ „์œผ๋กœ ๊ธˆ์•ก M์„ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•