# 팩토리얼
def recursive(n):
if n<=1:
return 1
else:
return n*recursive(n-1)
print(recursive(5))
# 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)
# 각 노드가 방문된 정보를 리스트 자료형으로 표현(1차원 리스트)
visited=[False]*노드개수(9)
# 정의된 DFS 함수 호출
dfs(graph,1,visited)
# BFS 메서드 정의
from collections import deque
def bfs(graph, start, visited):
# 큐 구현을 위해 deque 라이브러리 사용
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
# 각 노드가 방문된 정보를 리스트 자료형으로 표현(1차원 리스트)
visited=[False]*노드개수(9)
# 정의된 DFS 함수 호출
bfs=(graph,1,visited)
e.g., 음료수 얼려먹기: N X M 크기의 얼음 틀에서 상하좌우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주함. 얼음틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오.
-> DFS사용: 특정지점의 상하좌우에서 0이면서 방문하지 않는 지점을 방문 -> 방문지점에서 상하좌우를 살펴보며 방문 진쟁으로 연결된 모든 지점 방문 가능 -> 모든노드에 반복함으로써 방문하지 않은 지점의 수 세기
# 음료수 얼려 먹기
# DFS 메서드 정의
def dfs(x,y):
if x<=-1 or y<=-1 or x>=n or y>=m:
return False
if graph[x][y]==0:
graph[x][y]=1
dfs(x-1,y)
dfs(x,y-1)
dfs(x+1,y)
dfs(x,y+1)
return True
return False
n, m=map(int,input().split())
graph=[]
for i in range(n):
graph.append(list(map(int,input())))
answer=0
for i in range(n):
for j in range(m):
if dfs(i,j)==True:
answer+=1
print(answer)
e.g., N X M 크기의 직사각형 미로에서 괴물을 피해 탈출하기 위해 움직여야 하는 최소 칸의 개수 구하기
-> BFS(시작지점부터 가까운 노드부터 차례대로 그래프의 모든 노드 탐색)
-> (1,1)에서 BFS를 수행하여 모든 노드의 값을 거리 정보로 넣기 -> 특정노드 방문 시 그 이전 노드의 거리에 1을 더한 값을 넣는다
# BFS 메서드 정의
from collections import deque
# 미로 탈출
n,m=map(int,input().split())
graph=[]
for i in range(n):
graph.append(list(map(int,input())))
dx=[-1,1,0,0]
dy=[0,0,-1,1]
def bfs(x,y):
# 큐 구현을 위해 deque 라이브러리 사용
queue=deque()
queue.append((x,y))
#큐가 빌 때까지 반복
while queue:
#큐에서 하나의 원소를 뽑아 출력
x,y=queue.popleft()
for i in range(4):
nx=dx[i]+x
ny=dy[i]+y
if nx<0 or ny<0 or nx>=n or ny>=m:
continue
if graph[nx][ny]==0:
continue
if graph[nx][ny]==1:
graph[nx][ny]=graph[x][y]+1
queue.append((nx,ny))
return graph[n-1][m-1]
print(bfs(0,0))
[알고리즘] 이코테 - 다이나믹 프로그래밍(동적 계획법) (0) | 2024.01.11 |
---|---|
[알고리즘] 이코테 - 이진탐색 (0) | 2024.01.09 |
[알고리즘] 이코테 - 정렬 (0) | 2024.01.09 |
[알고리즘] 이코테 - 구현 (0) | 2024.01.05 |
[알고리즘] 이코테 - 그리디 (0) | 2024.01.02 |