๋ฐฑ์ค€ & ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/DFS & BFS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] DFS/BFS level2 ํƒ€๊ฒŸ๋„˜๋ฒ„

_cactus 2022. 3. 24. 17:44
๋ฐ˜์‘ํ˜•

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ์ฝ”๋”ฉ์—ฐ์Šต ์ค‘ level2์˜ DFS/BFS ์นดํ…Œ๊ณ ๋ฆฌ์˜ "ํƒ€๊ฒŸ๋„˜๋ฒ„" ๋ฌธ์ œ ํ’€์ด

(๋ฌธ์ œ : ์•„๋ž˜ ๋งํฌ๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡)

 

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

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

programmers.co.kr

 

๋ฌธ์ œํ’€์ด

 

์ฒ˜์Œ ์ ‘๊ทผ ๋ฐฉ์‹ (์ •ํ™•์„ฑ 75%, ํ…Œ์ผ€ 1,2๋ฒˆ ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ†ต๊ณผ ๋ชปํ•จ)

๋‚˜์˜ ๊ฒฝ์šฐ๋Š” ์ฒ˜์Œ ๋‘ ํ…Œ์ผ€์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค.

์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฃผ์–ด์ง„ numbers ๊ธธ์ด๋งŒํผ '+','-'๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ์ƒ์„ฑํ•ด์ฃผ๊ณ  ์ด๋ฅผ numbers์— ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. (itertools์˜ productํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ)

์˜ˆ๋ฅผ ๋“ค์–ด, [4,1,2,1] ๊ฐ€ numbers๋กœ ์ฃผ์–ด์ง„๋‹ค๋ฉด,

'+'์™€ '-'๋กœ ์ด๋ฃจ์–ด์ง„ ๊ธธ์ด๊ฐ€ 4๊ฐœ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

('+', '+', '+', '+') ('+', '+', '+', '-') ('+', '+', '-', '+') ('+', '+', '-', '-') ('+', '-', '+', '+') ('+', '-', '+', '-') ('+', '-', '-', '+') ('+', '-', '-', '-') ('-', '+', '+', '+') ('-', '+', '+', '-') ('-', '+', '-', '+') ('-', '+', '-', '-') ('-', '-', '+', '+') ('-', '-', '+', '-') ('-', '-', '-', '+') ('-', '-', '-', '-')

๊ทธ๋ฆฌ๊ณ  ์ด๋“ค ๊ฐ๊ฐ์„ numbers์˜ element ๊ฐ๊ฐ๊ณผ concatํ•˜๊ณ  string์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  evalํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ทธ ๊ฐ’์ด target๊ณผ ๊ฐ™์€์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จ..!

์ฝ”๋“œ
๋ฐ˜์‘ํ˜•
############# ์ •ํ™•์„ฑ : 75% #############
from itertools import product
def solution(numbers, target):
    numbers = list(map(lambda x :str(x), numbers))
    cnt = 0
    for i in product('+-', repeat=len(numbers)) :
        concat = list(map(str.__add__,i,numbers))
        if eval("".join(concat)) == target :
            cnt += 1
    return cnt

 

์‚ฌ์‹ค ์™„์ „ํƒ์ƒ‰์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๊ฒƒ์ด๋ผ ํ‹€๋ฆฐ ๋ฐฉ๋ฒ•์ด๋ผ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋œฌ ๊ฒƒ์„ ๋ณด์•„ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•œ ์ฝ”๋“œ์ธ ๊ฒƒ.


๋‘๋ฒˆ์งธ  ์ ‘๊ทผ ๋ฐฉ์‹ (์ •ํ™•์„ฑ 100%)

dfs/bfs ์นดํ…Œ๊ณ ๋ฆฌ ๋ฌธ์ œ์ธ๋ฐ ์™„์ „ํƒ์ƒ‰์œผ๋กœ ํ‘ผ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋๋˜ ๊ฒƒ ๊ฐ™์•„ dfs/bfs๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด๋ดค๋‹ค.

########## ์ •ํ™•์„ฑ 100% ##########
def solution(numbers, target):
    global cnt
    cnt = 0
    def dfs(idx,res) :
        global cnt
        if idx == len(numbers) :
            if res == target :
                cnt += 1
            return 0
        res1 = res + numbers[idx]*1
        dfs(idx+1,res1)

        res2 = res + numbers[idx]*(-1)
        dfs(idx+1,res2)
    dfs(0,0)
    return cnt
 
์ •ํ™•์„ฑ 100%๋กœ ํ†ต๊ณผํ•˜๊ธดํ–ˆ์ง€๋งŒ.. ์‚ฌ์‹ค ๋ญ”๊ฐ€ ๋‚ด ๋ง˜์— ์™ ๋“œ๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ์Œ ใ… ใ… 

์„ธ๋ฒˆ์งธ  ์ ‘๊ทผ ๋ฐฉ์‹ (์ •ํ™•์„ฑ 100%)

itertools์˜ productํ•จ์ˆ˜๋ฅผ ์ข€ ๋” "์ž˜" ํ™œ์šฉํ•ด๋ดค๋‹ค.

######### ์ •ํ™•์„ฑ 100% #########
from itertools import product
def solution(numbers, target):
    cnt = 0
    num_lst = [[+x,-x] for x in numbers]

    for i in product(*num_lst) :
        if sum(i) == target :
            cnt += 1
    return cnt

ํ’€์ด๋ฅผ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ํ•ด๋ณด์ž.

numbers = [1,2,3]์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค๊ณ  ํ•˜์ž.

num_lst = [[1, -1], [2, -2], [3, -3]] ๊ฐ€ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ด€๊ฑด์€ ์šฐ๋ฆฌ๋Š” num_lst์•ˆ์— ์žˆ๋Š” ๊ฐ list๋“ค์—์„œ ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฝ‘์•„์„œ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ์œ„ํ•ด itertools์˜ productํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ  *operator๋ฅผ ์‚ฌ์šฉํ•ด์คฌ๋‹ค.

๋”ฐ๋ผ์„œ product(*num_lst)๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

(1, 2, 3)
(1, 2, -3)
(1, -2, 3)
(1, -2, -3)
(-1, 2, 3)
(-1, 2, -3)
(-1, -2, 3)
(-1, -2, -3)

์ด ๊ฐ ๊ฒฐ๊ณผ๋ฌผ๋“ค์„ sumํ•˜์—ฌ target๊ณผ ๋น„๊ตํ•˜๋ฉฐ ๋‹ต์„ ๊ตฌํ•˜๋Š” ๊ฒƒ...!

 


๋‚ด๊ฐ€ ์ œ์‹œํ•œ ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋“ค๊ณผ ์ ‘๊ทผ๋ฐฉ์‹์ด ๋„์›€์ด ๋๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉด์„œ..!! ๋งˆ์นœ๋‹ค ๐Ÿ˜Š

728x90
๋ฐ˜์‘ํ˜•