๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š Algorithm/Programmers

Progammers ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - [ํƒ€๊ฒŸ ๋„˜๋ฒ„] 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์˜ ์ˆซ์ž๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ target์˜ ์ˆซ์ž์™€ ๋™์ผํ•œ ๊ฒฝ์šฐ๋ฅผ ์„ธ์•ผํ•œ๋‹ค. 

numbers์— ์žˆ๋Š” ๊ฐ ์ˆซ์ž๋“ค์€ +์™€ -์˜ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๊ฐ ์ˆซ์ž๋“ค์€ ๋ถ€ํ˜ธ์— ๋”ฐ๋ผ ๊ฐ’์ด ๋‹ค ๋‹ค๋ฅด๋ฏ€๋กœ 2๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. 

idx๋Š” dfs์˜ ๊นŠ์ด์™€ numbers์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ชจ๋‘ ๋‚˜ํƒ€๋‚ธ๋‹ค. values๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•ด๊ฐ€๋ฉด์„œ target์„ ํ–ฅํ•ด ๊ณ„์‚ฐํ•ด๋Š” ๊ฐ’๋“ค์ด๋‹ค. 

๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ๊นŠ์ด๊ฐ€ ์—†๊ณ , target๊ฐ’๊ณผ values๊ฐ€ ์ผ์น˜ํ•œ๋‹ค๋ฉด global ๋ณ€์ˆ˜ cnt๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. 

 

cnt = 0 
def dfs(numbers, target, idx, values): 
    global cnt
    
    if idx == len(numbers) :
        if values == target : 
            cnt += 1
            return 
    else : 
        dfs(numbers, target, idx+1, values + numbers[idx])
        dfs(numbers, target, idx+1, values - numbers[idx])

def solution(numbers, target) :
    global cnt
    dfs(numbers, target, 0, 0)
    return cnt

 

 

 

 

728x90