algorithm

์ˆœ์—ด๊ณผ ์กฐํ•ฉ๐Ÿ’ช

์ˆ˜ํ˜€์ด0812 2023. 9. 20. 02:17
728x90
๋ฐ˜์‘ํ˜•

์œ ํŠœ๋ฒ„ ๋”ฉ์ฝ”๋”ฉ์”จ ๋ณด๊ณ  ์ •๋ฆฌํ•ด๋ณด๋Š” ์ˆœ์—ด๊ณผ ์กฐํ•ฉ...

์žฌ๊ท€, ๋ฐฑํŠธ๋ž˜ํ‚น, dfs... ๋“ฑ๋“ฑ ์ •๋ง ๋งŽ์ด ์—ฐ๊ด€๋˜์–ด์žˆ์–ด์„œ ์ •๋ฆฌํ•˜๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™์•„ ์˜ฌ๋ ค๋ด…๋‹ˆ๋‹ค...

##### permutation(์ˆœ์—ด)

'''
์ˆœ์—ด : permutation(ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ˆ˜๊ฐ€ ๊ฐ™์€ ์ˆ˜์—ฌ๋„ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ๊ฑธ๋กœ ์นœ๋‹ค)
dfs ํŠธ๋ฆฌ์™€ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉ

3๊ฐœ์˜ ๊ณต ์ค‘์— 2๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ(3P2)
์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ๋„ฃ์œผ๋ฉด ์•ˆ๋˜๋ฏ€๋กœ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž„....
๊นŠ์ด + 1 ํ•œํ›„ ๊ธธ์ด์— ๋งž๋Š” ๊ฐ’์„ ๋ฆฌํ„ด์„ ํ•˜๊ณ ๋‚˜๋ฉด
๋‹ค์‹œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ์— ๋นผ์ค˜์„œ ๋‹ค์‹œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค..

1 2
1 3
2 1
2 3
3 1
3 2
6๊ฐ€์ง€
'''

def dfs(L):
    # ์ข…๋ฃŒ ์กฐ๊ฑด
    # ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ์ฐพ์•„์•ผ ํ•  ๊ฐœ์ˆ˜(r)๊ฐ€ ๋œ๋‹ค๋ฉด ์ข…๋ฃŒ
    if L == r:
        print(result)
    else:
        for i in range(len(n)):
            # ์ฒดํฌ๋ฆฌ์ŠคํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—†๋‹ค๋ฉด
            if checklist[i] == 0:
                # result ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ์ถ”๊ฐ€
                result[L] = n[i]
                # ์ฒดํฌ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์ด ์ƒ๊ฒผ๋‹ค๊ณ  ํ‘œ์‹œํ•ด์ฃผ๊ธฐ
                checklist[i] = 1
                # ๋‹ค์Œ ๊นŠ์ด๋กœ ์ด๋™
                dfs(L+1)
                # ๋‹ค์Œ ๋ฒˆ์— ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋นผ์ค€๋‹ค๊ณ  ๊ทธ๋ƒฅ ์ƒ๊ฐํ•˜์…ˆ ^^;;;
                checklist[i] = 0

n = [1, 2, 3]
r = 2
result = [0] * r
checklist = [0] * len(n)
dfs(0)

 

์ดํ•ด๋„ ์ดํ•ด์ง€๋งŒ ์–ด๋Š์ •๋„ ์™ธ์šธ๋งŒํผ์€ ์™ธ์šฐ๋ผ๊ณ  ํ•˜์‹ฌ...

์ดํ•ดํ•ด์•ผ ์™ธ์šฐ์ง€ ์‹ถ๋‹ค๊ฐ€๋„ ์ด๋Ÿฌ๋‹ค๊ฐ€ ์ง„๋„๊ฐ€ ์˜ ์•ˆ๋‚˜๊ฐˆ๊ฑฐ ๊ฐ™์•„์„œ ์ ๋‹นํžˆ ์ดํ•ด์‹œ์ผœ์„œ ์™ธ์šฐ๋Š”๊ฒƒ์ด ์ข‹์„ ๋“ฏ...

 

'''
์กฐํ•ฉ : ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๊ฐ™์€ ๊ฑธ๋กœ ์ธ์ •....
์ˆœ์—ด๋ณด๋‹ค ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ํ›จ์”ฌ ์ž‘์Œ...
์ˆœ์—ด๋ณด๋‹ค ๋” ๊ฐ„๋‹จ...
ํ•œ๋ฒˆ ์ผ์œผ๋ฉด ๋‹ค์‹œ ์“ฐ์ง€๋ฅผ ์•Š์œผ๋‹ˆ๊นŒ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋„ ํ•„์š”์—†์Œ...
DFS ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ํ‘ผ๋‹ค

3C2

1 2
1 3
2 3

3๊ฐ€์ง€
'''
def dfs(L, BeginWith):
    # ์ข…๋ฃŒ ์กฐ๊ฑด
    if L == r:
        print(*result)
    else:
        for i in range(BeginWith, len(n)): # ์‹œ์ž‘ํ•˜๋Š” ๊ฐ’๋ถ€ํ„ฐ ๋๊นŒ์ง€
            result[L] = n[i] # ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ธฐ
            dfs(L+1, i+1) # ๋‹ค์Œ ๊น‰์ด ๋‹ค์Œ ์ˆซ์ž๋กœ ์ด๋™ํ•˜์—ฌ ์ „ ๊ฐ’์„ ๋“ค์–ด์˜ค์ง€ ๋ชปํ•˜๋„๋ก


n = [1, 2, 3]
r = 2
result = [0] * r

dfs(0, 0) # level, begin(์–ด๋””์„œ ์‹œ์ž‘ํ• ์ง€)
728x90
๋ฐ˜์‘ํ˜•