suvera-dev ๐Ÿฅฆ

Algorithm) ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ์ดˆ (Feat. DFS์™€ BFS์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „..) ๋ณธ๋ฌธ

Algorithm/CodingTest - Python

Algorithm) ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ์ดˆ (Feat. DFS์™€ BFS์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „..)

suvera 2022. 4. 1. 08:31

DFS์™€ BFS๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์ „ .. ์ € ๋ฉ€๋ฆฌ ์žŠ๊ณ  ์žˆ์—ˆ๋˜ ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ์ดˆ ํŒŒํŠธ๊ฐ€ ์žˆ๊ธธ๋ž˜ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค !

 

โœจ ํƒ์ƒ‰(Search)์ด๋ž€ ? ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •

- ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ ๋“ฑ์˜ ์ž๋ฃŒ๊ตฌ์กฐ ์•ˆ์—์„œ ํƒ์ƒ‰์„ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ž์ฃผ ๋‹ค๋ฃจ๋Š”๋ฐ ์ด ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์›๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•ด์•ผ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์˜ ํƒ์ƒ‰ ๋ฌธ์ œ ์œ ํ˜•์„ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ! ๊ทธ๋Ÿฐ๋ฐ,, DFS์™€ BFS ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ์Šคํƒ๊ณผ ํ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์ „์ œ ๋˜์–ด์•ผ ํ•˜๋ฌด๋กœ ์‚ด์ง ์ •๋ฆฌํ•˜๊ณ  ๊ฐ‘๋‹ˆ๋‹ค ~ 

 

๐ŸŒฟ ์ž๋ฃŒ๊ตฌ์กฐ๋ž€? ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ ! 

- ๊ธฐ์ดˆ ๊ฐœ๋…์ธ ์Šคํƒ๊ณผ ํ์—์„œ Push, Pop ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ์ ์ธ ํ•จ์ˆ˜ ์ด ์™ธ์—๋„ ์˜ค๋ฒ„ํ”Œ๋กœ, ์–ธ๋”ํ”Œ๋กœ๋ฅผ ๊ณ ๋ฏผํ•ด์•ผํ•œ๋‹ค.

- ์˜ค๋ฒ„ํ”Œ๋กœ๋Š” ํŠน์ •ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ด๋ฏธ ๊ฐ€๋“ ์ฐฌ ์ƒํƒœ์—์„œ ์‚ฝ์ž… ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐœ์ƒ 

- ์–ธ๋”ํ”Œ๋กœ๋Š” ํŠน์ •ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ „ํ˜€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐœ์ƒ 

 

1. ์Šคํƒ Stack

- ๋ฐ•์Šค ์Œ“๊ธฐ์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ ์ž…ํ›„์ถœ 

- ํŒŒ์ด์ฌ์—์„œ ์Šคํƒ์„ ์ด์šฉํ•  ๋•Œ์—๋Š” ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

- ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ์—์„œ append() ์™€ pop() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ 

- append()๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋’ค์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , pop()์€ ๋ฆฌ์ŠคํŠธ์— ๊ฐ€์žฅ ๋’ค์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๊ธฐ ๋•Œ๋ฌธ ! 

 

2. ํ 

- ๋Œ€๊ธฐ์ค„์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ ์ž…์„ ์ถœ 

- from collections import deque : ํŒŒ์ด์ฌ์œผ๋กœ ํ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” collections ๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋Š” 

deque ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์ž ( queue = deque() )

- deque๋Š” ์Šคํƒ๊ณผ ํ์˜ ์žฅ์ ์„ ๋ชจ๋‘ ์ฑ„ํƒํ•œ ๊ฒƒ์ธ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋บด๋Š” ์†๋„๊ฐ€ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์— ๋น„ํ•ด ํšจ์œจ์ ์ด๋ฉฐ queue ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋‹ค ! 

- ๋Œ€๋ถ€๋ถ„ ์ฝ”ํ…Œ์—์„œ collections ๋ชจ๋“ˆ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•œ๋‹ค !

- deque ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด list() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์ž : list(queue)

 

3. ์žฌ๊ท€ํ•จ์ˆ˜

DFS์™€ BFD ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์žฌ๊ท€ํ•จ์ˆ˜๋„ ์ดํ•ดํ•ด์•ผ๋œ๋‹ค !

- ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜ 

- ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ˜ธ์ถœ ํšŸ์ˆ˜ ์ œํ•œ์ด ์žˆ์–ด์„œ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๊ณ„์† ํ˜ธ์ถœ๋˜๋‹ค๊ฐ€ ์žฌ๊ท€์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ์ดˆ๊ณผํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๊ฐ€ ๋œฌ๋‹ค ! ( ๋ฌดํ•œ๋Œ€๋กœ ์žฌ๊ท€ํ˜ธ์ถœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋Ÿฐ ๋ฌธ์ œ ๋˜ํ•œ ์ถœ์ œ๋˜์ง€ ์•Š์„ ๊ฒƒ ! )

 

๐Ÿ“Œ ์žฌ๊ท€ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ ์กฐ๊ฑด

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋ฌธ์ œ ํ’€์ด์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ์–ธ์ œ ๋๋‚ ์ง€, ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๊ผญ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

์ข…๋ฃŒ์กฐ๊ฑด์„ ๋ช…์‹œํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ํ•จ์ˆ˜๊ฐ€ ๋ฌดํ•œ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค. 

def recursive_function(i):
	#100๋ฒˆ์งธ ์ถœ๋ ฅํ–ˆ์„๋•Œ ์ข…๋ฃŒ๋˜๋„๋ก ์ข…๋ฃŒ์กฐ๊ฑด ๋ช…์‹œ
    if i == 100:
    	return
    print(i,'๋ฒˆ์งธ ์žฌ๊ท€ํ•จ์ˆ˜์—์„œ' , i+1,'๋ฒˆ์งธ ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ')
    recursive_function(i+1)
    print(i, '๋ฒˆ์งธ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ')

recursive_function(1)

- ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์—์„œ ์žฌ๊ท€ํ•จ์ˆ˜์˜ ์ˆ˜ํ–‰์€ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉ

- ํ•จ์ˆ˜๋ฅผ ๊ณ„์† ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ๋จผ์ € ์ˆ˜ํ–‰์„ ๋๋‚ด์•ผ ๊ทธ ์•ž์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ !

- ๋‚ด๋ถ€์ ์œผ๋กœ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋™์ผํ•˜๋‹ค !

- ๋”ฐ๋ผ์„œ , ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด์•ผํ•˜๋Š” ์ƒ๋‹น์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค !

- ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ DFS 

- ํŒฉํ† ๋ฆฌ์–ผ ๋ฌธ์ œ : n! = 1 x 2 x 3 x ... x (n-1) x n -> ์ˆ˜ํ•™์ ์œผ๋กœ 0! ๊ณผ 1!์˜ ๊ฐ’์€ 1๋กœ ๊ฐ™๋‹ค๋Š” ์„ฑ์งˆ์„ ์ด์šฉํ•˜์—ฌ ํŒฉํ† ๋ฆฌ์–ผ ํ•จ์ˆ˜๋Š” n ์ด 1 ์ดํ•˜๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ์žฌ๊ท€ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค ! 

 

# ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ n!
def factorial_iterative(n):
	result = 1
    for i in range(1, n+1):
    	result *= i
    return result
    
# ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ n!
def factorial_recursive(n):
	if n <= 1:
    	return 1
    return n + factorial_recursive(n-1)

-  ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋™์ผ ! ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•จ . 

-  ์™œ ? ์ˆ˜ํ•™์˜ ์ ํ™”์‹์„ ๊ทธ๋Œ€๋กœ ์†Œ์Šค์ฝ”๋“œ๋กœ ์˜ฎ๊ฒผ๊ธฐ ๋•Œ๋ฌธ ! 

- ์ ํ™”์‹ ? ํŠน์ •ํ•œ ํ•จ์ˆ˜๋ฅผ ์ž์‹ ๋ณด๋‹ค ๋” ์ž‘์€ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํ•จ์ˆ˜์™€์˜ ๊ด€๊ณ„๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ ์˜๋ฏธ 

- ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์ ํ™”์‹์—์„œ ์ข…๋ฃŒ์กฐ๊ฑด์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค  n์ด 0 ๋˜๋Š” 1์ผ๋•Œ 

- ์–‘์˜ ์ •์ˆ˜์ผ๋•Œ๋งŒ ์œ ํšจ : n ์ด 1 ์ดํ•˜์ธ ๊ฒฝ์šฐ 1์„ ๋ฐ˜ํ™˜ 

- ์Œ์ˆ˜๊ฐ’์ผ ๋• ? ์ž…๋ ฅ ๋ฒ”์œ„์˜ค๋ฅ˜ !

 

 

 

์—ฌ๊ธฐ๊นŒ์ง€ DFS ์™€ BFS ํ•˜๊ธฐ์ „์˜ ํ•„์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ์ดˆ ๊ฐœ๋…์„ ์‚ดํŽด๋ดค๋‹ค >> ์ด์ œ ์ฐ DFS BFS ํ•˜๋Ÿฌ ๊ฐ€๋ณด์Ÿˆ๊ณ  ~

'Algorithm > CodingTest - Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Algorithm) DFS/BFS ์‹ค์ „๋ฌธ์ œ  (0) 2022.04.02
Algorithm) DFS/BFS  (0) 2022.04.02
Algorithm ) Implementation  (0) 2022.04.01
Algorithm ) Greedy (2)  (2) 2022.02.06
Algorithm ) Greedy  (0) 2022.02.05
Comments