Algorithm

[programmers] ํƒ€๊ฒŸ ๋„˜๋ฒ„ python

๐Ÿณ ๋งํฌ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํƒ€๊ฒŸ๋„˜๋ฒ„

๐Ÿ• ๋ฌธ์ œ

n๊ฐœ์˜ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ˆ˜๋ฅผ ์ ์ ˆํžˆ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ์„œ ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด [1, 1, 1, 1, 1]๋กœ ์ˆซ์ž 3์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹ค์„ฏ ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numbers, ํƒ€๊ฒŸ ๋„˜๋ฒ„ target์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์ˆซ์ž๋ฅผ ์ ์ ˆํžˆ ๋”ํ•˜๊ณ  ๋นผ์„œ ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

๐Ÿพ ํ’€์ด ๋ฐฉ๋ฒ•

์ƒํƒœ ํŠธ๋ฆฌ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๊ฐ numbers์˜ ์›์†Œ์— ๋Œ€ํ•ด์„œ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋”ํ•˜๊ฑฐ๋‚˜, ๋นผ๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
๋”ฐ๋ผ์„œ, dfs์—์„œ๋Š” Level์„ ๋‚˜ํƒ€๋‚ด๋Š” L์ด๋ผ๋Š” ๋ณ€์ˆ˜์™€ ํ•ฉ์‚ฐ ๊ฐ’์ธ total์„ ์ „๋‹ฌํ•ด์„œ, L์ด numbers์˜ ๊ธธ์ด์™€ ๊ฐ™์„ ๋•Œ total ๊ฐ’์ด target๊ณผ ๊ฐ™์œผ๋ฉด cnt๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

๋ชจ๋“  ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์„ฑ๊ณต ์ฝ”๋“œ

def solution(numbers, target):
    n = len(numbers)
    cnt = 0
    def dfs(L, total):
        if L == n:
            if total == target:
                nonlocal cnt
                cnt += 1
        else:
            dfs(L+1, total+numbers[L])
            dfs(L+1, total-numbers[L])

    dfs(0,0)
    return cnt