목록dfs (8)
하루일문
문제 1937번: 욕심쟁이 판다 n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에 www.acmicpc.net 코드 import sys sys.setrecursionlimit(10 ** 6) input = sys.stdin.readline dx = [0, 0, 1, -1] dy = [1, -1, 0, 0] def dfs(x, y): if visited[x][y]: return visited[x][y] visited[x][y] = 1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0
문제 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 코드 combinatiuons from itertools import permutations, combinations import sys input = sys.stdin.readline N = int(input()) graph = [list(map(int, input().split())) for _ in range(N)] # p = permutations(range(0, N), N//2) p = list(combinations(range(N), N//2)) # print(list..
문제 14716번: 현수막 혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라. www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline dx = [1, 1, 1, 0, 0, -1, -1, -1] dy = [-1, 0, 1, -1, 1, 1, 0, -1] def DFS(graph, visited, i, j): visited[i][j] = True for _ in range(8): X = i + dx[_] Y = j + dy[_] if 0
문제 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 풀이 DFS dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] big = 0 def dfs(graph, x, y, visited): global c c += 1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0
문제 1926번: 그림 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로 www.acmicpc.net 풀이 DFS # 방향으로 움직일 리스트 dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] big = 0 def dfs(graph, x, y, visited): global big, c # 큰 값을 구해줘 big = max(big, visited[x][y]) # 빠지지 않고 계속 움직이면 돌아가더라도 숫자를 유지시켜줘 c += 1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0
문제 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 풀이 DSF def dsf(graph, n, visited): global cnt for j in graph[n]: if visited[j] == 0: visited[j] = visited[n] + 1 dsf(graph, j, visited) import sys input = sys.stdin.readline people = int(input()) graph = [[] for _ in range(people + 1)] visited = ..
풀이 import sys sys.setrecursionlimit(10**6) # 파이썬은 재귀 깊이가 정해져있어서 의도적으로 늘려주어야 합니다. dx = [-1, -1, -1, 0, 0, 1, 1, 1] dy = [-1, 0, 1, -1, 1, -1, 0, 1] def dsf(graph, x, y, visit): # 8방향 반복 for _ in range(8): nx = x + dx[_] ny = y + dy[_] # 표 안에 들어가면서 안 드린곳 if 0
풀이 # DFS def dfs(grap, v, visit): # 지금 들린곳 체크 visit[v] = True # 들린곳 순서에 따라 프린트 DFS.append(v) # 작은 것부터 우선해서 들여 for i in sorted(grap[v]): # 안 들렸다면 들려 if not visit[i]: dfs(grap, i, visited) # BFS from collections import deque def bfs(grap, v, visit): # 덱처리 queue = deque([v]) # 방문 체크 visit[v] = True while queue: # 리스트에 맨 앞쪽 체크, 제거 n = queue.popleft() # 체크한 부분 순서에따라 프린트 BFS.append(n) # 체크된 리스트에 있는 숫자..