์ฝ”ํ…Œ

ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ - (1) ๊ทธ๋ฆฌ๋””, ๊ตฌํ˜„, DFS, BFS

sueeee-e 2025. 1. 21. 13:47

 

 

๐Ÿ“๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ํƒ์š•๋ฒ• : ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•

ex) ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ, 1์ด ๋  ๋•Œ๊นŒ์ง€ 

 

* ์ˆซ์ž 09380 ๋ฅผ ๋ฐ›์•„์„œ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆซ์ž๋ฅผ ๊ณฑํ•˜๊ฑฐ๋‚˜ ๋”ํ•ด์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ๋˜๊ฒŒ ํ•˜๋Š” ๋ฌธ์ œ

result = int(data[0])

for i in range(1, len(data)):
	num = int(data[i])
    if num <= 1 or result <= 1:
    	result += num
    else:
    	result *= num
        
print(result)

 

๐Ÿ“๊ตฌํ˜„ ๋ฌธ์ œ : ํ’€์ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ธฐ๋Š” ์‰ฝ์ง€๋งŒ ์†Œ์Šค์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ 

- ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ„๋‹จํ•œ๋ฐ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋Š” ๋ฌธ์ œ

- ์‹ค์ˆ˜ ์—ฐ์‚ฐ์„ ๋‹ค๋ฃจ๊ณ , ํŠน์ • ์†Œ์ˆ˜์  ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ

- ๋ฌธ์ž์—ด์„ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ์„œ ๋Š์–ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ

- ์ ์ ˆํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ

 

*2์ฐจ์› ๊ณต๊ฐ„ -> ํ–‰๋ ฌ๋กœ ํ‘œํ˜„, ๋ฐฉํ–ฅ ๋ฒกํ„ฐ ํ™œ์šฉ

 

์˜ˆ์‹œ) ์ƒํ•˜์ขŒ์šฐ ๋ฌธ์ œ 

n = int(input())
x, y = 1,1
dx = [0,0,-1,1]
dy = [-1,1,0,0]
move_types = ['L', 'R', 'U', 'D']

for plan in plans:
	for i in range(len(move_types)):
    	if plan == move_types[i]:
        	nx = x + dx[i]
            ny = y + dy[i]
    if nx < 1 or ny < 1 or nx > n or ny > n:
    	continue
        
    x, y = nx, ny

 

์‹œ๊ฐ ๋ฌธ์ œ - ์™„์ „ํƒ์ƒ‰ ๋ฌธ์ œ 

-> ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰

h = int(input())

count = 0
for i in range(h+1): #	์‹œ
	for j in range(60): # ๋ถ„
    	for k in range(60): #์ดˆ
        	if '3' in str(i) + str(j) + str(k):
            	count += 1

 

์•„์Šคํ‚ค์ฝ”๋“œ ํ™œ์šฉํ•ด์„œ ์•ŒํŒŒ๋ฒณ -> ์ˆซ์ž 

data = input()
result = []
value = 0

for x in data:
	if x.isalpha():
    	result.append(x)
    else:
    	value += int(x)

result.sort()

if value != 0:
	result.append(str(value))
    
print (''.join(result)) #๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

 


๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํƒ์ƒ‰ : ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •

 

DFS/BFS


* ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ (์„ ์ž…ํ›„์ถœ) ์ž…๊ตฌ์™€ ์ถœ๊ตฌ๊ฐ€ ๋™์ผํ•จ

ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ append() , pop() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒŒ ์Šคํƒ 

 

* ํ ์ž๋ฃŒ๊ตฌ์กฐ (์„ ์ž…์„ ์ถœ) ์ž…๊ตฌ์™€ ์ถœ๊ตฌ๊ฐ€ ๋‹ค๋ฆ„

import collections import deque #๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 

queue = deque()

queue.append(), queue.popleft() #ํ•จ์ˆ˜ ์ด์šฉ

 

* ์žฌ๊ท€ํ•จ์ˆ˜ : ์ž๊ธฐ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜  -> ํ•จ์ˆ˜๊ฐ€ ์Šคํƒ๊ณผ ๋น„์Šทํ•œ ์›๋ฆฌ๋กœ ์‹คํ–‰๋จ

def recursive_function():
    print("์žฌ๊ท€ํ•จ์ˆ˜")
    recursive_function()
recursive_function()

 

-> ํŒŒ์ด์ฌ์—์„œ๋Š” ์ตœ๋Œ€ ๊นŠ์ด๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์–ด ์ค‘๊ฐ„์— ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ 

-> ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๋ช…์‹œํ•ด์•ผ ํ•จ

์˜ˆ์‹œ) ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ˜„์—์„œ n! ๋ฅผ n*(n-1)*(n-2).. ๋ฐ˜๋ณต๋ฌธ๋ณด๋‹ค n* (n-1)! ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ฝ”๋“œ ๊ธธ์ด ์ƒ ๋” ํšจ๊ณผ์ ์ด๋‹ค. 

 

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• : ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• : ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ณ„์‚ฐ

*์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• : a, b์— ๋Œ€ํ•˜์—ฌ a๋ฅผ b๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ r์ด๋ผ๊ณ  ํ•œ๋‹ค. a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” b์™€ r์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค. 

 

๋ชจ๋“  ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด์„œ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 


๐Ÿ“DFS : ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰

-> ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰

์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ(ํ˜น์€ ์žฌ๊ท€ํ•จ์ˆ˜)๋ฅผ ์ด์šฉ

graph = [
[],
[2,3,8]
...
]

#๋ชจ๋‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ •์˜
visited = [False] * 9 

#dfs ๋ฉ”์„œ๋“œ ์ •์˜ 
def dfs(graph, v, visited):
	visited[v] = True
    print(v, end=" ")
    for i in graph[v]:
    	if not visited[i]:
        	dfs(graph, i, visited)
            
dfs(graph, 1, visited)

 

๐Ÿ“BFS : ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰

-> ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰

ํ ์ž๋ฃŒ๊ตฌ์กฐ ์ด์šฉ

from collections import deque

graph = [
[],
[2,3,8],
...
]

visited = [False] * 9

# bfs ๋ฉ”์„œ๋“œ ์ •์˜
def bfs(graph, start, visited):
	queue = deque([start])
    visited[start] = True
    # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    while queue:
    	v = queue.popleft()
        print(v, end='')
        for i in graph[v]:
        	if not visited[i]:
            	queue.append(i)
                visited[i] = True
                
bfs(graph, 1, visited)