Algorithm

Algorithm/Boj

[BOJ] 백준 파이썬 13237 - Binary Tree

문제 입력 및 출력 코드 n = int(input()) graph = [0 for _ in range(n+1)] for i in range(n): node = int(input()) graph[i+1] = node for i in range(n): cnt = 0 v = graph[i+1] if v == -1: print(cnt) else: while v != -1: v = graph[v] cnt += 1 print(cnt) 풀이 * graph 변수를 입력받는 노드의 크기 + 1 크기로 초기화하여, 각각의 n 노드의 부모의 위치를 저장한다. * cnt 변수는 부모 노드로 위치한 횟수를 더하여, 해당 노드의 높이를 나타냅니다. ( v == -1 이면 루트 노드이기에 0을 출력합니다.) * 루트 노드가 아닌 ..

Algorithm/Boj

[백준] 24445번 : 너비우선 탐색 - 파이썬 풀이

문제 코드 from collections import deque import sys input = sys.stdin.readline n, m, r = map(int, input().split()) # n : 정점 m : 간선의 수 r :시작 정점 graph = [[] for _ in range(n+1)] # 빈 그래프 2차원 배열 생성 for i in range(m): a, b = map(int, input().split()) graph[a].append(b)# 연결된 정점들 입력하기 graph[b].append(a) visited = [0] * (n+1)# 정점 n이 몇 번째에 방문하는지 count = 1# 방문하는 차례 visited[r] = 1# 시작 정점 r이 첫 번째 순서 queue = dequ..

Algorithm

이것이 코딩테스트다 파이썬 BFS 문제풀이 - 미로 탈출

문제 설명동빈이는 N * M 크기의 직사각형 형태의 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 동빈이의 위치는 (1, 1)이고 미로의 출구는 (N, M)의 위치에 존재하며 한 번에 한 칸씩 이동할 수 있다. 이때 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다.이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오. 칸을 셀 때는 시작 칸과 마지막 칸을 모두 포함해서 계산한다.  코드from collections import deque# n, m 입력받기n, m = map(int, input().split())graph = []# 그래프 모양 입력 받기for _ in range(n): ..

Algorithm/Boj

[백준] 1388번 : 바닥 장식 - python 풀이

문제 설명 코드 # DFS 함수 정의 def dfs(x, y): # 바닥 장식이 '-' 일 때 if graph[x][y] == '-': graph[x][y] = 1 # 해당 노드 방문처리 for _y in [1, -1]: # 좌우 노드가 '-' 모양인지 확인 Y = y + _y # 좌우 노드가 주어진 범위를 벗어나지 않고 '-' 모양이라면 재귀함수 호출 if (Y > 0 and Y < m) and graph[x][Y] == '-': dfs(x, Y) # 바닥 장식이 '|'일 때 if graph[x][y] == '|': graph[x][y] = 1 # 해당 노드 방문처리 for _x in [1, -1]: # 상하 노드가 '|' 모양인지 확인 X = x + _x # 상하 노드가 주어진 범위를 벗어나지 않고 ..