๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ’ก/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(DFS/BFS)_ํƒ€๊ฒŸ ๋„˜๋ฒ„.py(ํŒŒ์ด์ฌ)

by @ENFJ 2024. 10. 1.

DFS ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ, ๊ฐ ์ˆซ์ž๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ๋Š” ๋‘ ๊ฐ€์ง€ ์„ ํƒ์„ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

ํ’€์ด ๊ณผ์ •:

1. ๊ฐ ์ˆซ์ž๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์„ ํƒํ•˜์—ฌ, ๋”ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๋นผ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•œ๋‹ค.

2. ๋ชจ๋“  ์ˆซ์ž์— ๋Œ€ํ•ด ์—ฐ์‚ฐ์„ ๋งˆ์ณค์„ ๋•Œ, ๊ฒฐ๊ณผ๊ฐ’์ด ํƒ€๊ฒŸ ๋„˜๋ฒ„์™€ ๊ฐ™์œผ๋ฉด ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 1 ์ฆ๊ฐ€ ์‹œํ‚ต๋‹ˆ๋‹ค.

3. ์ตœ์ข…์ ์œผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„, ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

def solution(numbers, target):
    answer = 0 # ํƒ€์ผ“ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜

# dfs ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ์ˆซ์ž์˜ ์ธ๋ฑ์Šค(index)์™€ ํ˜„์žฌ๊นŒ์ง€์˜ ํ•ฉ(current_sum)์„ ๋ฐ›์•„ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
    def dfs(index, current_sum):
        # nonlocal answer ์€ ๋‚ด๋ถ€ํ•จ์ˆ˜์ธ dfs์—์„œ ๋ฐ”๊นฅ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜ answer๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ.
        # ์ด๊ฒŒ ์—†์œผ๋ฉด answer๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋กœ์ปฌ ๋ณ€์ˆ˜๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.
        nonlocal answer  

        # ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์ฒ˜๋ฆฌํ•œ ๊ฒฝ์šฐ

        #**if index == len(numbers):**๋Š” ํ˜„์žฌ index๊ฐ€ numbers ๋ฐฐ์—ด์˜ ๋์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 
        # ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ๋‹ค ์ฒ˜๋ฆฌํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
        if index == len(numbers): 
            if current_sum == target:
                answer += 1

            # ๊ทธ ํ›„์—๋Š” **return**์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๊ณ„์‚ฐํ•  ์ˆซ์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
            return
        

        # ํ˜„์žฌ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ๊ฒฝ์šฐ
        dfs(index + 1, current_sum + numbers[index])

        # ํ˜„์žฌ ์ˆซ์ž๋ฅผ ๋นผ๋Š” ๊ฒฝ์šฐ
        dfs(index +1,current_sum - numbers[index])
    
    # ํƒ์ƒ‰ ์‹œ์ž‘
    #์ดˆ๊ธฐ ํ˜ธ์ถœ: ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ dfs(0, 0)์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 0์€ ์ฒ˜์Œ ์ธ๋ฑ์Šค์ด๊ณ , ๋‘ ๋ฒˆ์งธ 0์€ ํ˜„์žฌ ํ•ฉ๊ณ„์ž…๋‹ˆ๋‹ค. 
    # ์ฆ‰, ์•„๋ฌด ์ˆซ์ž๋„ ์•„์ง ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    dfs(0, 0)


    #๋ชจ๋“  ํƒ์ƒ‰์ด ์™„๋ฃŒ๋˜๋ฉด, answer ๊ฐ’(ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    return answer


numbers = [1, 1, 1, 1, 1]
target = 3

result = solution(numbers, target)
print(result) # ์ถœ๋ ฅ: 5