ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ - (1) ๊ทธ๋ฆฌ๋, ๊ตฌํ, DFS, BFS
๐๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ : ํ์๋ฒ : ํ์ฌ ์ํฉ์์ ์ง๊ธ ๋น์ฅ ์ข์ ๊ฒ๋ง ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ
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)