DFS (Depth First Search, 깊이 우선 탐색) 시작 정점으로부터 연결 된 노드를 따라 마지막 노드까지 탐색하는 알고리즘 특징 - 모든 노드를 탐색해야할 때 사용 - 재귀적 장점 - 구현이 BFS보다 간단하다. - 저장 공간이 비교적 적다. - 목표 노드가 깊은 단계에 있을 경우 해를 빨리 구할 수 있다. 단점 - 단순 검색 속도가 BFS보다 느리다. - 목표까지의 경로가 여러 개인 경우 구한 해가 최적이 아닐 수 있다. - 해가 없는 경로에 깊이 빠질 가능성이 있다. -> 임의의 깊이까지 탐색할 때까지 목표를 찾지 못한다면 다음 경로를 찾을 수도.. Python 구현 코드 check = [0 for i in range(N)] # 방문 여부를 확인 s = [[0, 1, 1, 1], [1, ..
www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net import sys, copy sys.setrecursionlimit(100000) N = int(sys.stdin.readline()) s = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] for i in range(N): h = max(s[i]) result = 1 dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] def dfs..
www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net import sys sys.setrecursionlimit(50000) T = int(sys.stdin.readline()) dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] def dfs(x, y): s[x][y] = 0 for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0
programmers.co.kr/learn/courses/30/lessons/43164 코딩테스트 연습 - 여행경로 [[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] [ICN, ATL, ICN, SFO, ATL, SFO] programmers.co.kr def solution(tickets): answer = [] tickets.sort(reverse=True) routes = {} for t1, t2 in tickets: if t1 in routes: routes[t1].append(t2) else: routes[t1] = [t2] stack = ['ICN'] while stack: top = stack[-1] if top not in route..
https://programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있�� programmers.co.kr def dfs(computers, check, v): check[v] = 1 for i in range(len(check)): if check[i] == 0 and computers[v][i] == 1: dfs(computers, check, i) def solution(n, computers): answer = 0 check = [0] * n for ..
https://www.acmicpc.net/problem/11403 11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net import sys N = int(sys.stdin.readline()) s = [] check = [0] * N def dfs(v): for i in range(N): if check[i] == 0 and s[v][i] == 1: check[i] = 1 dfs(i) for i in range(N): s.append(list(map(int, sys.stdin.readline().split()))) for i in range(N): dfs(..
https://www.acmicpc.net/problem/6603 6603번: 로또 문제 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2 www.acmicpc.net * DFS import sys def lotto(n, k): if k == 6: for i in range(6): print(ans[i], ..
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 import sys sys.setrecursionlimit(10000) N, M = map(int, sys.stdin.readline().split()) matrix = [[0] * N for _ in range(N)] check = [0] * N cnt = 0 def dfs(n): check[n] = 1 for i in ran..