본문 바로가기

DFS5

[백준 24479, 24480번] 알고리즘 수업 - 깊이 우선 탐색 1, 2 문제https://www.acmicpc.net/problem/24479https://www.acmicpc.net/problem/24480풀이- 알고리즘 수업 - 깊이 우선 탐색 1# N개의 정점과 M개의 간선으로 구성된 무방향 그래프# 정점 R에서 시작해 깊이 우선 탐색한 노드 방문 순서 출력import syssys.setrecursionlimit(10 ** 6)input = sys.stdin.readline# 정점의 수, 간선의 수, 시작 정점N, M, R = map(int, input().split())graph = [[] for _ in range(N+1)]visited = [0] * (N+1)cnt = 1def dfs(graph, visited, r): global cnt visited.. 2024. 4. 29.
[백준 11725번] 트리의 부모 찾기 🤯 문제 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 예제 입력 1에 대한 트리 1 / \ 6 4 / / \ 3 7 2 / 5 BFS import sys input = sys.stdin.readline from collections import deque # 노드의 개수 N (2 ≤ N ≤ 100,000) N = int(input().rstrip()) tree = [[] for _ in range(N+1)] for i in range(1, N): a, b = map(int, input().split()) tree[a].append(b) tree[b].append(a) .. 2024. 3. 15.
[백준 11724번] 연결 요소의 개수 - Python, DFS/BFS 문제 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 정점(N)과 간선(M)의 개수가 주어질 때 연결 요소의 개수를 구하라. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 간선 u, v (1 ≤ u, v ≤ N, u ≠ v) 대표적인 DFS/BFS 문제이다. 시간 제한 3초, 메모리 제한 512 MB에 주의해야 한다. 풀이 ✏️ DFS import sys input = sys.stdin.readline sys.setrecursion.. 2024. 3. 12.
[백준 2667번] 단지번호붙이기 - Python 문제 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 풀이 # 1 - 집이 있는 곳, 0 - 집이 없는 곳 # 단지 수 출력, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력해라. import sys input = sys.stdin.readline # 정사각형 지도 크기 n = int(input()) square_map = [] for i in range(n): square_map.append(list(map(int, input().rstrip()))) cnt = 0 result = 0 def dfs(x.. 2024. 3. 9.
[DFS/BFS] 탐색 알고리즘 이해하기, 주요 예시 문제 📌 DFS, BFS에서 중요한, 알아야 할 개념 - 스택 - 큐 - 재귀 함수 📍 반복문, 재귀 함수 2가지 방식으로 구현한 팩토리얼(!) 예제 # 반복적으로 구현한 n! def factorial_iterative(n): result = 1 for i in range(1, n + 1): result *= i return result # 재귀적으로 구현한 n! def factorial_recursive(n): if n 연결 리스트 이용 -> 파이썬 2차원 리스트(append, 메소드 제공) 이용하면 된다. - 연결된 정보만을 저장하기 때문에 메모리를 효율적으로 사용 -> 인접 행렬 방식에 비해 특정한 두 노드가 연결되어 있는지에 대한 정보를 얻는 속도가 느리다. 그래프 그래프는 노드(Node)와 간선(Ed.. 2023. 10. 31.