본문 바로가기

알고리즘/DFS | BFS

(19)
자바 | 백준 | 12761 | 돌다리 package BOJ; import java.io.*; import java.util.*; public class BOJ_12761_돌다리 { static int A, B, N, M; public static void main(String[] args) throws IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); A = Integer.parseInt(st.nextToken()); B = Integer.parseInt(st.ne..
자바 | 백준 | 3109 | 빵집 Solution 1. 오른쪽 위, 오른쪽, 오른쪽 아래 순서로 dfs 진행한다. // 3109, 빵집 package BOJ; import java.io.*; import java.util.*; public class BOJ_3109 { static int R, C; static char[][] board; static int[] dx = { -1, 0, 1 }; static int[] dy = { 1, 1, 1 }; static boolean flag; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTo..
파이썬 | 백준 | 17073 | 나무 위의 빗물 solution 더 이상 물이 움직이지 않는 상태가 되었을 때 → 물이 모두 말단 노드에 있을 때 확률 랜덤 → 말단 노드의 개수를 세서 그냥 W로 나눈다. # 17073, 나무 위의 빗물 import sys from collections import deque def bfs(x): global leaf visited[x] = 1 q = deque() q.append(x) while q: n = q.popleft() if len(graph[n]) == 1 and visited[graph[n][0]]:# 말단 노드이면 leaf++ leaf += 1 for i in graph[n]: if not visited[i]: visited[i] = 1 q.append(i) N, W = map(int, sys.stdi..
파이썬 | 백준 | 1939 | 중량제한 solution1 : 배열 이용 메모리 초과 (무턱대고 사용하지 말 것..) # 1939, 중량제한 import sys N, M = map(int, sys.stdin.readline().split()) bridges = [[0]*(N+1) for _ in range(N+1)] for _ in range(M): a, b, c = map(int, sys.stdin.readline().split()) bridges[a][b] = max(bridges[a][b], c) bridges[b][a] = max(bridges[b][a], c) in1, in2 = map(int, sys.stdin.readline().split()) print(bridges[in1][in2]) solution2 : 이분탐색 + BFS 1..
파이썬 | 백준 | 16234 | 인구 이동 solution bfs 이용(Puyo Puyo랑 비슷하게 풀면 됨 li-fo.tistory.com/80) # 16234, 인구 이동 import sys from collections import deque dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y): q = deque() q.append((x, y)) visited[x][y] = 1 tmp = [[x, y]] while q: a, b = q.popleft() for i in range(4): nx = a + dx[i] ny = b + dy[i] if 0
파이썬 | 백준 | 11559 | Puyo Puyo solution 1. 4개 이상 연결되어있는 경우 찾기 2. 4개 이상 연결된 뿌요의 좌표를 boom 배열에 저장해 한 번에 터트림 3. 4개 이상의 연결된 뿌요가 없을 때까지 1,2 반복 # 11559, Puyo Puyo import sys from collections import deque dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y, ch): visited[x][y] = 1 q = deque() tmp = [] # 좌표 임시 저장하는 배열 q.append((x, y)) tmp.append((x, y)) while q: a, b = q.popleft() for i in range(4): nx = a + dx[i] ny = b + dy[i] if 0
파이썬 | 백준 | 2573 | 빙산 solution 1. dir4(x, y): 주변의 0 카운트하여 개수만큼 빙산을 녹임. 다 녹으면 -1로 만듦. (0으로 바로 만들면 인접한 빙산을 dir4()이용해 녹일 때 0 개수가 같이 카운트 되므로 일단 -1로 만들고 큐에 좌표 저장) 2. bfs_all() : 빙산의 덩어리를 세는 함수 * PyPy3로 제출 # 2573, 빙산 import sys from collections import deque dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def dir4(x, y): zero = 0 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0
C++ | 백준 | 1325 | 효율적인 해킹 solution 단방향 그래프 #include "stdafx.h" #include #include #include using namespace std; int N, M; vector G[10001]; int visited[10001] = { 0, }; int cnt; void dfs(int node) { //방문 visited[node] = 1; cnt += 1; for (int i = 0; i > N >> M; while (M--) { int c1, c2; cin >> c1 >> c2; G[c2].push_back(c1); } i..