


분석
입력
출력
풀이
N, M, V = map(int, input().split())
#행렬 만들기
graph = [[0]*(N+1) for _ in range(N+1)]
for i in range(M):
a, b = map(int, input().split())
graph[a][b] = graph[b][a] = 1
#방문 리스트 행렬
visited1 = [0]*(N+1)
visited2 = visited1.copy()
# dfs
def dfs(V):
visited1[V] = 1 # 방문처리
print(V, end=' ')
for i in range(1, N+1):
# 노드 V와 연결되어 있고, 방문하지 않은 노드 찾기
if graph[V][i] == 1 and visited1[i] == 0:
dfs(i)
# bfs
def bfs(V):
queue = [V] # 시작 노드 큐에 추가
visited2[V] = 1 # 방문처리
while queue: # 큐가 빈다 -> 방문할 노드가 없다
V = queue.pop(0) # 방문 노드 제거
print(V, end = ' ')
for i in range(1, N+1):
# 노드 V와 연결되어 있고, 방문하지 않은 노드 찾기
if (visited2[i] == 0 and graph[V][i] == 1):
queue.append(i)
visited2[i] = 1
dfs(V)
print()
bfs(V)
문제
입력
출력
풀이
N = int(input()) # 컴퓨터의 수
M = int(input()) # 컴퓨터 쌍의 수
A = [[0] *(N+1) for _ in range(N+1)]
# 행렬 만들기
for i in range(M):
a, b = map(int, input().split())
A[a][b] = A[b][a] = 1
visited = [0] * (N+1)
answer = []
def dfs(V):
visited[V] = 1
answer.append(V)
for i in range(N+1):
if visited[i] == 0 and A[V][i] == 1:
dfs(i)
dfs(1)
print(len(answer)-1)
문제
풀이
N = int(input()) # 지도의 크기
graph = []
for i in range(N):
a = list(map(int, input().rstrip()))
graph.append(a)
dx = [0,0,-1,1]
dy = [1,-1,0,0]
count = 0
result = []
def dfs(x, y):
global count
if x < 0 or x >= N or y < 0 or y >= N:
return
if graph[x][y] == 1:
count += 1
graph[x][y] = 0 # 방문처리
for j in range(4):
nx = dx[j] + x
ny = dy[j] + y
dfs(nx,ny)
for i in range(N):
for j in range(N):
if graph[i][j] == 1:
dfs(i,j)
result.append(count)
count = 0
result.sort()
print(len(result))
for i in result:
print(i)
문제
입력
출력
풀이
from collections import deque
M, N = map(int, input().split())
graph = []
for i in range(N):
g = list(map(int, input().split()))
graph.append(g)
dx = [0,0,-1,1]
dy = [1,-1,0,0]
answer = 0
queue = deque([])
for i in range(N):
for j in range(M):
if graph[i][j] == 1:
queue.append([i,j])
def bfs():
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < M and graph[nx][ny] == 0:
graph[nx][ny] = graph[x][y] + 1
queue.append([nx,ny])
bfs()
for i in graph:
for j in i:
if j == 0:
print(-1)
exit(0)
answer = max(answer, max(i))
print(answer-1)
문제
입력
출력
풀이
틀린 풀이
def solution(tickets):
a = len(tickets)
visited = [0] * a
tickets.sort(key=lambda x: (x[0], x[1]))
print(tickets)
answer = []
def dfs(airport):
answer.append(airport)
for i, (j,k) in enumerate(tickets):
if j == airport and visited[i] == 0:
visited[i] = 1
dfs(k)
dfs("ICN")
return answer
#print(solution([["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]]))
# ["ICN", "JFK", "HND", "IAD"]
#print(solution([["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]]))
# ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]
print(solution([["ICN", "BBB"], ["BBB", "ICN"], ["ICN", "AAA"]]))
# ["ICN", "BBB", "ICN", "AAA"]
이게 첫 풀이었는데 순서대로는 맞지만, AAA는 이어질 곳이 없다 이 부분을 빼먹었다...