DFS

    [백준 파이썬] #1967. 트리의 지름

    풀기 전 생각해보기😮 루트노드로부터 가장 먼 지점을 찾고, 해당 지점을 다시 루트 노드로하는 가장 먼 지점을 찾으면 트리의 지름을 구할 수 있다 recursionError가 발생하면 setrecursionlimit을 먼저 적용해보자 풀이🛫 구글링 참고 # 루트노드로부터 가장 먼 지점(가중치의 합)이 가장 큰 지점을 찾는 과정을 두번 반복 # visited를 음수값으로 설정하고 확인할 때마다 값을 바꿔준다면 방문 여부의 확인과 함께 거리를 나타낼 수 있다 import sys sys.setrecursionlimit(10**6) # 최대 재귀 깊이를 늘려주는 코드 def dfs(node, weight): for n, w in graph[node]: if visited[n] == -1: # 확인한 적이 없는 노..

    [백준 파이썬] #1987. 알파벳

    풀기 전 생각해보기😮 DFS로 풀이했다면 pypy3로 채점을 시도, BFS로 풀이했다면 python3로 채점할 수 있다고 한다. (자세한 이유까지는 모르겠다) 풀이🛫 # dfs 풀이는 pypy3로 제출해야 한다고 함: 자세한 이유는 모르겠다.. # 문제 채점 과정이 매우 오래 걸린다 # 정답 # U,R,D,L dcol = [-1, 0, 1, 0] drow = [0, 1, 0, -1] def dfs(col, row): global level, max_level visited[col][row] = 1 # 방문 처리 alpha_lst[ord(arr[col][row])-65] = 1 # 방문한 지점의 알파벳 처리 level += 1 # 재귀가 반복될 때마다 깊이(level) 증가 max_level = max(l..

    [알고리즘] DFS 구현

    # V개의 노드, E개의 간선이 주어질 때 V, E = map(int, input().split()) graph = [[] for i in range(V+1)] # 그래프 구성 for e in range(E): u, v = map(int, input().split()) graph[u].append(v)# 단방향일 때 #graph[v].append(u)# 양방향일 때 # 방문 정보를 저장할 공간 visited = [0] * (V+1)# 인덱스 에러(혼동)을 방지하기 위해 V+1만큼 메모리 생성 # DFS 함수 구성 def dfs(v): # 해당 정점을 방문 visited[v] = 1; # print(v, end=" "); # 방문 정보가 궁금할 때 확인 가능 # v의 방문하지 않은 인접 정점을 탐색 for..

    [백준 파이썬] # 15651 N과 M (3)

    Silver III # 15651 N과 M (3) 링크 : https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 N, M = map(int, input().split()) def dfs(depth, seq): if depth == M: print(' '.join(list(map(str, seq)))) return for i in range(1, N+1): seq.append(i) dfs(depth+1, seq) seq.pop() dfs(0, ..

    [백준 파이썬] # 15649 N과 M (1)

    Silver III # 15649 N과 M (1) 링크 : https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 N, M = map(int, input().split()) def dfs(depth, seq): if depth == M: print(' '.join(list(map(str, seq)))) for i in range(1, N+1): if i not in seq: temp = seq.copy() temp.append(i) dfs(de..

    [백준 파이썬] # 1012 유기농 배추 (DFS 풀이)

    Silver II # 1012 유기농 배추 링크 : https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 풀이 (DFS) # 재귀 limit 설정 import sys sys.setrecursionlimit(10000) ### 2 # dfs 정의 def dfs(x, y): # 상하좌우 확인을 위해 dx, dy 생성 dx = [0,0,-1,1] dy = [1,-1,0,0] # 네 방향 탐색 for i in range(4): nx = x + dx[i] ny = y +..

    [백준 파이썬] # 2667 단지 번호 붙이기 (DFS 풀이)

    Silver I # 2667 단지 번호 붙이기 링크 : https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 풀이 (DFS) # n의 개수, graph, visited 정의 n = int(input()) graph = [[0]*n for _ in range(n)] visited = [[False]*n for _ in range(n)] # 입력값을 graph에 기입 for i in range(n): line = input() for j, b in enu..

    [백준 파이썬] # 1260 DFS와 BFS

    Silver II # 1260 DFS와 BFS 링크 : https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 풀이 from collections import deque n, m, v = map(int, input().split()) graph = [[] for _ in range(n+1)] for i in range(m): s, e = map(int, input().split()) graph[s].append(e..

    [이코테 자료구조] 3. 스택/큐 자료구조, 재귀함수, DFS & BFS

    DFS / BFS by 나동빈님 링크 https://www.youtube.com/watch?v=7C9RgOcvkvo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3 탐색 : 많은 양의 데이터 중 원하는 데이터를 찾는 과정 DFS, BFS는 탐색 알고리즘에 해당 코딩 테스트에서 자주 등장하는 유형 스택 자료구조 선입후출 : 먼저 들어온 데이터가 나중에 나가는 형식 입구와 출구가 동일한 형태 ex) 박스 쌓기, 플링글스 통 구조 삽입과 삭제로 진행, 시간복잡도 : O(1) stack = [] stack.append(n) stack.pop(n) 최상단 원소부터 출력하려면 stack을 역순으로 출력 큐 자료구조 선입선출 : 먼저 들어온 데이터가 먼저 나가는 형식 입구와 출구..