πŸ’œ μ½”λ”©ν…ŒμŠ€νŠΈ/πŸ’œSWEA

2817. λΆ€λΆ„ μˆ˜μ—΄μ˜ ν•© (D3 python)

eyes from es 2023. 11. 18. 01:03
728x90
λ°˜μ‘ν˜•

πŸ“Œ  문제 λ°”λ‘œκ°€κΈ°

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW ν”„λ‘œκ·Έλž˜λ° μ—­λŸ‰ 강화에 도움이 λ˜λŠ” λ‹€μ–‘ν•œ ν•™μŠ΅ 컨텐츠λ₯Ό ν™•μΈν•˜μ„Έμš”!

swexpertacademy.com

 

πŸ’‘μ ‘κ·Ό 방법

  • 값을 ν¬ν•¨ν•˜λŠ” 경우, ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” 경우 -> 2κ°€μ§€μ˜ 경우의 수둜 κ°ˆλž˜κ°€ λ‚˜λ‰˜κ³ ,
    • κ·Έ 갈래 쀑에 Kκ°’κ³Ό 같은 갯수λ₯Ό κ΅¬ν•˜κΈ°
  • μ—¬λŸ¬ 갈래둜 λ»—μ–΄λ‚˜κ°„λ‹€ -> dfs둜 μ ‘κ·Ό ν•΄λ³΄μž!
    • ν¬ν•¨ν•˜λŠ” 경우, ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” 경우 -> dfs μž¬κ·€ν•¨μˆ˜λ₯Ό 2번 ν˜ΈμΆœν•΄μ„œ ν•˜λ‚˜λŠ” 포함O, ν•˜λ‚˜λŠ” 포함X
  • sum을 μ „λ‹¬ν•˜λ©΄μ„œ sum==K이면 
    • count +=1 ν•˜κ³ , return

 

 

πŸ€”  return 을 μ•ˆν•˜λ©΄?

return을 μ•ˆ ν•˜λ©΄ κ·Έ κ°ˆλž˜κ°€ λλ‚˜μ§€ μ•Šκ³  쀑볡 계산이 λœλ‹€

 

예λ₯Ό λ“€μ–΄ data = [1,2,1,2] 이고 K=3μΌλ•Œ

 

1,2,1,2

OO       : 1번째 인덱슀 λ”ν•˜κ³  λ‚œ ν›„ count ++

OOX     : 2번째 인덱슀 μ•ˆ λ”ν•˜κ³  λ‚œ ν›„ count++

OOXX   : 3번째 인덱슀 μ•ˆ λ”ν•˜κ³  λ‚œ ν›„ count++

OXXO   : 3번째 인덱슀 λ”ν•˜κ³  λ‚œ ν›„ count++

 

XOO     :  2번째 인덱슀 λ”ν•˜κ³  λ‚œ ν›„ count++

XOOX   :  3번째 인덱슀 μ•ˆ λ”ν•˜κ³  λ‚œ ν›„ count++

XXOO   :  3번째 인덱슀 λ”ν•˜κ³  λ‚œ ν›„ count++

 

return값을 λ„£μ§€ μ•ŠμœΌλ©΄ κ·Έ 이후에도 계속 count++κ°€ λ˜μ–΄μ„œ 쀑볡이 λ˜μ–΄ 7이 λ‚˜μ˜¨λ‹€

 

 

βœ…  return을 λ„£μœΌλ©΄

1,2,1,2

OO|       : 1번째 인덱슀 λ”ν•˜κ³  λ‚œ ν›„ count ++ return

OOX     : 2번째 인덱슀 μ•ˆ λ”ν•˜κ³  λ‚œ ν›„ count++

OOXX   : 3번째 인덱슀 μ•ˆ λ”ν•˜κ³  λ‚œ ν›„ count++

OXXO|   : 3번째 인덱슀 λ”ν•˜κ³  λ‚œ ν›„ count++ return

 

XOO|     :  2번째 인덱슀 λ”ν•˜κ³  λ‚œ ν›„ count++ return

XOOX   :  3번째 인덱슀 μ•ˆ λ”ν•˜κ³  λ‚œ ν›„ count++

XXOO|   :  3번째 인덱슀 λ”ν•˜κ³  λ‚œ ν›„ count++ return

 

쀑볡을 μ œκ±°ν•˜μ—¬ 4κ°€ λ‚˜μ˜¨λ‹€.

 

 

πŸ’‘ ν’€μ΄μ½”λ“œ

def dfs(index, sum = 0):
    global count

    if sum == K:
        count +=1
        return  #return 을 ν•˜λ©΄ κ·Έ 이후 data[index] μ•ˆ λ”ν•˜κ³  이 κ°ˆλž˜λŠ” 끝남

    if index == N:
        return

    dfs(index+1, sum + data[index]) #ν¬ν•¨ν•œ 경우
    dfs(index+1, sum) #ν¬ν•¨ν•˜μ§€ μ•Šμ€ 경우

tc = int(input())

for i in range(tc):
    N, K = map(int, input().split())
    count = 0
    data = list(map(int,input().split()))
    dfs(0)
    print('#{} {}'.format(i+1, count))
728x90
λ°˜μ‘ν˜•