์ฝ”ํ…Œ์ค€๋น„

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ2. ํƒ€์ผ“ ๋„˜๋ฒ„ <์˜ค๋‹ต๋…ธํŠธ>

์š”๋Œœ๋‹ค 2022. 8. 17. 20:46

https://school.programmers.co.kr/learn/courses/30/lessons/43165

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

์‰ฌ์šธ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์›Œ์„œ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค..ใ…‹ใ…‹

์ง„์งœ ์–ธ์ œ์ฏค ๋ ˆ๋ฒจ2๋Š” ๋ˆˆ ๊ฐ๊ณ  ํ’€ ์ˆ˜ ์žˆ์„๊นŒ

 

๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ํ’€์–ด๋ณผ ์˜ˆ์ •์ด๋‹ค.

from itertools import product

def solution(numbers, target):
    length = len(numbers)
    # ์ „์ฒด ๊ฐ€๋Šฅํ•œ case ๊ตฌํ•˜๊ธฐ
    cases = list(product([-1, 1], repeat = len(numbers)))
    print(cases)
    # target ์ธ ๊ฒฝ์šฐ๋งŒ count ํ•˜๊ธฐ
    cnt = 0
    for case in cases:
        sum = 0
        for i in range(len(numbers)): #0~4
            sum += case[i] * numbers[i]
        if sum == target :
            cnt += 1
    return cnt

product์˜ ๊ณฑํ•ฉ์„ ์ด์šฉํ•œ ํ’€์ด์ด๋‹ค. ๋น„ํšจ์œจ์ ์ธ ์ฝ”๋“œ์ด๊ธด ํ•˜์ง€๋งŒ, ๋‚ด๋ถ€ ํ•จ์ˆ˜ ๊ธฐ๋Šฅ์„ ์ž˜ ์“ด ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ€์ ธ์™”๋‹ค.

๋‚˜๋„ ์œ„ ์ฝ”๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ product๋ฅผ ์ด์šฉํ•ด [1,1,1,1,1] ๋ถ€ํ„ฐ [-1,-1,-1,-1,-1] ๋“ฑ๋“ฑ์˜ ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ๊ตฌํ–ˆ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผํ• ์ง€ ๊ฐ์ด ์žกํžˆ์งˆ ์•Š์•˜๋‹ค. 

๋ณด๋‹ˆ๊น,  ์ด์ค‘๋ฐ˜๋ณต๋ฌธ ์›์†Œ i๋ฅผ case[i] number[i]์— ๋ชจ๋‘ ๋„ฃ์–ด์ค˜์„œ ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ๋‹ค ๋Œ๊ฒŒ ํ•˜์˜€๋‹ค. 

์Œ ์ด๊ฑธ ์–ด๋–ค ์‹์œผ๋กœ ์ ์–ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค...........

๋‚˜๋Š” ์ด์ค‘๋ฐ˜๋ณต๋ฌธ ์›์†Œ๋ฅผ case[i]์™€ numbers[j]๋กœ ์ ‘๊ทผํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ๋Ÿผ numbers๊ฐ€ 1์”ฉ ์ฆ๊ฐ€๋  ๋•Œ, case๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, case๊ฐ€ 0์ผ๋•Œ, numbers๊ฐ€ 0~5๊นŒ์ง€ ๋‹ค ๋Œ๊ฒŒ ๋ผ์„œ ์‹คํŒจํ•˜์˜€๋Š”๋ฐ,

๊ทธ๋ƒฅ ๋‘˜ ๋‹ค j๋ฅผ ๋„ฃ์œผ๋ฉด ๋์—ˆ๋‹ค.....

 

์ด์ œ ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์•Œ์•„๋ณด์ž.

dfs/bfs๋ฅผ ์ด์šฉํ•œ๋‹ค.

def solution(numbers, target):
	super = [0]
    for i in numbers:
    	sub = []
        for j in super:
        	sub.append(j+i)
            	sub.append(j-i)
        super = sub #์Šˆํผ๋…ธ๋“œ๋กœ ์„ค์ •   
        
    return super.count(target)

๋Œ€๋ฐ•์ด๋‹ค.........

๋‚ด๊ฐ€ ์ด๊ฑธ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ...?

์ดํ•ดํ•˜๋Š”๋ฐ๋„ ํ•œ ์ฐธ ๊ฑธ ๋ ธ ๋‹ค . . .