자료구조 14

[프로그래머스] Graph 복습 및 실습문제(전력망을 둘로 나누기) 풀이 - 파이썬

📖 문제 📃 코드 cnt = 0 def DFS(v, ch, graph): global cnt ch[v] = 1 cnt += 1 for i in graph[v]: if ch[i] == 0: DFS(i, ch, graph) def solution(n, wires): global cnt answer = n graph = [[] for _ in range(n+1)] cnt = [0] * (n-1) for v1, v2 in wires: graph[v1].append(v2) graph[v2].append(v1) for v1, v2 in wires: ch = [0]*(n+1) # 끊는 역할 ch[v2] = 1 cnt = 0 DFS(v1, ch, graph) answer = min(answer, abs(cnt - (n..

백준[Python] 11724.연결 요소의 개수 - 파이썬

📖 문제 📃 코드 import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline N, M = map(int, input().split()) matrix = [[0]*(N+1) for i in range(N+1)] visited = [False] * (N+1) for i in range(M): a, b = map(int, input().split()) matrix[a][b] = matrix[b][a] = 1 def dfs(v): visited[v] = True for node in range(len(matrix[v])): if visited[node] == False and matrix[v][node] == 1: dfs(node) cnt = 0 fo..

백준[Python] 1260.DFS와 BFS - 파이썬

📖 문제 📃 코드 from collections import deque import sys input = sys.stdin.readline N, M, V = map(int, input().split()) matrix = [[0]*(N+1) for i in range(N+1)] visited = [False] * (N+1) visited1 = [False] * (N+1) for i in range(M): a, b = map(int, input().split()) matrix[a][b] = matrix[b][a] = 1 def dfs(V): visited[V] = True print(V, end=" ") # 수행동작 for i in range(N+1): if visited[i] == False and mat..

프로그래머스[Python] 네트워크 - 파이썬

📖 문제 📃 코드 def dfs(n, computers, com, visited): visited[com] = True # 자기 자신을 제외한 모든 case를 방문했는지 확인 for nx in range(n): if nx != com and computers[com][nx] == 1: # 방문하지 않았다면 if visited[nx] == False: dfs(n, computers, nx, visited) def solution(n, computers): answer = 0 visited = [False]*n # 모든 컴퓨터들을 돌면서 네트워크 체크 for com in range(n): # 만약 방문하지 않은 컴퓨터라면 dfs실행 if visited[com] == False: dfs(n, computers..

프로그래머스[Python] 타겟 넘버 - 파이썬

📖 문제 📃 코드 # 정수들을 순서를 바꾸지 않고 적정히 더하거나 빼서 # -> 모든 숫자들을 사용해야함 DFS def dfs(numbers, target, index, s): global answer # 1. 탈출조건 if index == len(numbers): if s == target: answer += 1 return answer # 2. 수행동작 dfs(numbers, target, index+1, s + numbers[index]) dfs(numbers, target, index+1, s - numbers[index]) def solution(numbers, target): global answer answer = 0 dfs(numbers, target, 0, 0) return answer ..

[프로그래머스] BFS 복습 및 실습문제(송아지 찾기) 풀이 - 파이썬

📖 문제 현수는 송아지를 잃어버렸습니다. 다행히 송아지에는 위치추적기가 달려 있습니다. 현수의 위치와 송아지의 위치가 수직선 상의 좌표 점으로 주어지면 현수는 현재 위치에서 송아지의 위치까지 다음과 같은 방법으로 이동합니다. 송아지는 움직이지 않고 제자리에 있습니다. 현수는 스카이 콩콩을 타고 가는데 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다. 현수의 위치 s와 송아지의 위치 e가 주어지면 최소 몇 번의 점프로 현수가 송아지의 위치까지 갈 수 있는지 구하는 프로그램을 작성하세요. 최소 점프의 횟수는 1 이상입니다. [제한사항] - 수직선 상의 좌표는 1부터 10,000까지입니다. - s와 e는 같은 값으로 입력되지 않습니다. 📃 코드 from collections import d..

[프로그래머스] DFS 복습 및 실습문제(피로도) 풀이 - 파이썬

📖 문제 댕발자 게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다. 이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러 개 있는데, 한 유저가 오늘 이 던..