본문 바로가기

Algorithm 💡272

[백준 1012번] 유기농 배추 # 테스트케이스 수 t = int(input()) count_list = [] def dfs(x,y): if x = n or y = m: return False if area[x][y] == 1 and not visited[x][y]: visited[x][y] = True nx = [-1,1,0,0] ny = [0,0,-1,1] for i in range(4): temp_x = x + nx[i] temp_y = y + ny[i] dfs(temp_x,temp_y) return True return False for _ in range(t): # 세로(n), 가로(m), 배추 개수(k) m, n, k = map(int,input().split()) area = [[0]*m.. 2023. 2. 13.
[백준 2667번] 단지번호붙이기 n = int(input()) # 2차원 배열 지도 arr = [] # 방문 여부 확인용 2차원 배열 visited =[[False]*n for _ in range(n)] # 단지 내 가구 수 count = 0 # 단지 내 가구 수 리스트 count_list = [] for i in range(n): arr.append(list(map(int,list(input())))) # dfs 함수 def dfs(x,y): global count # 집이 존재한지 / 방문한 적 있는지 여부 확인 if arr[x][y] == 1 and not visited[x][y]: # 방문 처리 visited[x][y] = True # 단지 내 가구 수 증가 count += 1 # 상-하-좌-우로 이동하기 위한 값 nx = [-.. 2023. 2. 13.
[백준 2178번] 미로 탐색 from collections import deque n,m = map(int,input().split()) # n x m 크기의 미로 maze = [] # 방문 여부 확인용 2차원 배열 visited = [[False]*m for _ in range(n)] # 미로 입력받고 저장 for _ in range(n): maze.append(list(map(int,input()))) # bfs 함수 def bfs(x,y): # 방문 처리 visited[x][y] = True # queue 자료구조 선언 queue = deque([(x,y)]) while queue: v = queue.popleft() vx = v[0] vy = v[1] nx = [-1,1,0,0] ny = [0,0,-1,1] # 상-하-좌-우.. 2023. 2. 12.
[백준 2606번] 바이러스 from collections import deque vertex_count = int(input()) edge_count = int(input()) graph = [[] for _ in range(vertex_count + 1)] for _ in range(edge_count): x, y = map(int,input().split()) graph[x].append(y) graph[y].append(x) visited = [False] * (vertex_count+1) count = 0 def dfs(graph, v, visited): global count visited[v] = True count += 1 for i in graph[v]: if not visited[i]: dfs(graph,i,vis.. 2023. 2. 12.
[백준 1260번] DFS와 BFS from collections import deque n, m ,v = map(int,input().split()) graph = [[] for _ in range(n+1)] visited_dfs = [False] * (n+1) visited_bfs = [False] * (n+1) # 노드와 간선 정보 받기 for _ in range(m): x, y = map(int,input().split()) graph[x].append(y) # 두 정점 사이의 간선은 양방향이므로 양방향으로 저장 graph[y].append(x) # 방문할 수 있는 정점이 여러 개인 경우 정점 번호가 작은 것 부터 방문해야 하므로 # 각 노드마다 정렬 for i in graph: i.sort() # DFS 함수 구현 def dfs(.. 2023. 2. 12.
[BFS] BFS 알고리즘의 개념 및 동작과정 / DFS와 BFS 선정 기준 BFS는 Breadth-First Search, 너비 우선 탐색이라고 부르며 가까운 노드부터 탐색하는 알고리즘이다. BFS 구현에서는 선입선출 방식인 Queue 자료구조를 이용하는 것이 정석이다. 인접한 노드를 반복적으로 큐에 넣도록 알고리즘을 작성하면 자연스럽게 먼저 들어온 것이 나가게 되어, 가까운 노드부터 탐색을 진행하게 된다. BFS 알고리즘의 동작 과정 1. 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 2. 큐에서 노드를 꺼내 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리를 한다. 3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. 너비 우선 탐색 알고리즘인 BFS는 Queue 자료구조에 기초한다는 점에서 구현이 간단하다. 실제로 구현 함에 .. 2023. 2. 11.