DFS 11

백준 11725번 트리의 부모 찾기 파이썬

https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 내 코드 import sys from collections import deque input = sys.stdin.readline N = int(input()) visited = [0] * (N + 1) result = [0] * (N + 1) graph = [[] for _ in range(N + 1)] for i in range(N - 1): a, b = map(int, input().split()) graph[a].append(b) graph[b].app..

BOJ/Python 2023.06.16

백준 9095번 1, 2, 3 더하기 파이썬

https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 내 답안 dp = [0, 1, 2, 4, 0, 0, 0, 0, 0, 0, 0] for i in range(int(input())): n = int(input()) if n == 1 or n == 2 or n == 3: print(dp[n]) else: for i in range(4, n + 1): dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] print(dp[n]) 처음 접근할 때는 DFS로 돌려서 풀었다. DFS를 돌려보니 규칙이 보였고, 직접 n == 5 인 경우..

BOJ/Python 2022.06.27

백준 24542번 튜터-튜티 관계의 수 파이썬

https://www.acmicpc.net/problem/24542 24542번: 튜터-튜티 관계의 수 첫째 줄에 튜터-튜티 관계를 정하는 경우의 수를 $1\,000\,000\,007$로 나눈 나머지를 출력한다. www.acmicpc.net 내 답안 import sys from collections import deque input = sys.stdin.readline N, M = map(int, input().split()) graph = [[] for _ in range(N + 1)] for _ in range(M): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) visited = [0] * (N + 1) def bfs(..

BOJ/Python 2022.02.28

백준 2468번 안전 영역 파이썬 DFS

https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 내 답안 import copy import sys sys.setrecursionlimit(10 ** 6) def dfs(x, y): if x = N or x >= N: return False if native_graph[x][y] == 1: native_graph[x][y] = 0 dfs(x - 1, y) dfs(x, y - 1) dfs(x + 1, y) dfs(x, y..

BOJ/Python 2022.02.22

백준 10026번 적록색약 파이썬 DFS

https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 답안 import sys sys.setrecursionlimit(10**4) def dfs_R(x,y): if x = n or y >= n: return False if graph[x][y] == 'R': graph[x][y] = 'C' dfs_R(x-1,y) dfs_R(x,y-1) dfs_R(x+1,y) dfs_R(x,y+1) return True ret..

BOJ/Python 2022.02.10

백준 4963번 섬의 개수 파이썬 DFS

https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 답안 import sys sys.setrecursionlimit(10**4) # 재귀스택 확장 def dfs(x, y): if x = w or x >= h: return False if graph[x][y] == 1: graph[x][y] = 0 dfs(x-1, y) # 반 시계 방향 순환 dfs(x-1, y-1) dfs(x, y-1) dfs(x+1, y-1..

BOJ/Python 2022.02.07

백준 11724번 연결 요소의 개수 파이썬 DFS

https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 답안 (PyPy3) def dfs(graph, v, visited): visited[v] = True for i in graph[v]: if not visited[i]: dfs(graph, i, visited) n, m = map(int, input().split()) graph = [[] for i in range(n+1)] visi..

BOJ/Python 2022.02.06

백준 1012번 유기농 배추 파이썬 DFS

https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 답안 import sys sys.setrecursionlimit(10**6) def dfs(x, y): if x = m or y = n: return False if graph[x][y] == 1: graph[x][y] = 0 dfs(x-1, y) dfs(x, y-1) dfs(x+1, y) dfs(x, y+1) return True return False for _ in range(int(input())): ..

BOJ/Python 2022.02.06

백준 2606번 바이러스 파이썬 DFS

https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 답안 def dfs(graph, v, visited): visited[v] = True for i in graph[v]: if not visited[i]: dfs(graph, i, visited) n = int(input()) m = int(input()) visited = [False] * (n+1) graph = [[] for _ in range(n+1)] lst = [] for _ in range..

BOJ/Python 2022.02.05

백준 2667번 단지 번호 붙이기 파이썬 DFS

https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 답안 lst = [] n = int(input()) graph = [] for i in range(n): graph.append(list(map(int, input()))) def dfs(x, y): if x = n or y = n: return False if graph[x][y] == 1: graph[x][y] = 0 lst.append(0) dfs(x-1, y) # 상 dfs(x, y-1) #..

BOJ/Python 2022.02.04