문제풀이 324

[프로그래머스][Lv2] - 다리를 지나는 트럭(파이썬/Python)

from collections import deque def solution(bridge_length, weight, truck_weights): time = 0 b = deque([0 for _ in range(bridge_length)]) w = 0 #다리 위의 무게 q = deque(truck_weights) while len(q) > 0 or w > 0: #지워주는 작업부터 시작. # 0으로 초기화 해주어서 popleft의 문제가 생기지 않는 것. removeTruck = b.popleft() w -= removeTruck if len(q) and q[0] + w

[백준][Floyd-Warshall/BFS]2660.회장 뽑기 (파이썬/Python)

from collections import deque n = int(input()) graph = [[] for _ in range(n+1)] score = [0] * (n+1) while True: a,b = map(int,input().split()) if a == -1 and b == -1: break graph[a].append(b) graph[b].append(a) def bfs(start): q = deque() q.append(start) while q: now = q.popleft() for i in graph[now]: if score[i] == 0: score[i] = score[now] + 1 q.append(i) bfs(1) min_score = min(score) print(min..

[백준][Greedy/BFS] 16953. A → B (파이썬/Python)

from collections import deque a,b = map(int,input().split()) q = deque() q.append((a,1)) # a부터 시작하는데 a부터 cnt가 1이기에 a,1을 큐에 넣어준다. while q: now, cnt = q.popleft() #종료 조건 if now == b: print(cnt) break elif now > b: continue q.append((int(str(now)+"1"),cnt+1)) # 맨오른쪽에 1을 추가해주는 것 q.append((now*2,cnt+1)) # 2를 곱하는 것 else: #큐를 모두 돌고 비어있는 큐인데도 원하는 값이 없으면 -1 출력 print(-1) a,b = map(int,input().split()) cnt..

[백준][DFS/BFS]2644. 촌수계산 (파이썬/Python)

import sys sys.setrecursionlimit(300000) input = sys.stdin.readline n = int(input()) start, end = map(int,input().split()) m = int(input()) graph = [[] for _ in range(n+1)] graph_dist = [0]*(n+1) for _ in range(m): u,v = map(int,input().split()) graph[u].append(v) graph[v].append(u) def dfs(start_node): for i in graph[start_node]: if graph_dist[i] == 0: graph_dist[i] = graph_dist[start_node] + 1..

[백준][DFS/BFS] 11725.트리의 부모 찾기 (파이썬/Python)

import sys input = sys.stdin.readline sys.setrecursionlimit(10**6) n = int(input()) graph = [[] for _ in range(n+1)] parentNode = [0 for _ in range(n+1)] for i in range(n-1): a,b = map(int,input().split()) graph[a].append(b) graph[b].append(a) def dfs(now): for i in graph[now]: if parentNode[i] == 0: parentNode[i] = now dfs(i) dfs(1) for i in parentNode[2:]: print(i) import sys input = sys.stdin..

[백준][DFS] 6118.숨바꼭질 (파이썬/Python)

거리가 2인 지점은 4, 5, 6로 가장 먼 거리에서 숫자가 낮은 4가 숨어야하는 지점으로 출력이 되어야 하고, 숨어야 하는 헛간까지의 거리를 출력해야 하고, 그 거리만큼의 다른 지점이 몇개인지를 출력해야 한다. 그리고 가중치가 따로 없기에 다익스트라 말고 BFS로 충분히 풀 수 있는 문제임. from collections import deque import sys input = sys.stdin.readline def bfs(start): q = deque() q.append(start) dist[start] = 1 while q: x = q.popleft() for i in graph[x]: if dist[i] == 0: dist[i] = dist[x]+1 q.append(i) n, m = map(i..

[백준][Dijkstra/다익스트라] 2206.벽 부수고 이동하기 (파이썬/Python)

import sys import heapq input = sys.stdin.readline INF = 1e9 def dijkstra(n,start,end,graph): q = [] dist = [INF]*(n+1) dist[start] = 0 heapq.heappush(q,[start,0]) while q: pos, cost = heapq.heappop(q) for p,c in graph[pos]: c += cost if c < dist[p]: dist[p] = c heapq.heappush(q,[p,c]) return dist[end] n = int(input()) #도시 개수 m = int(input()) #버스 개수 graph = [[] for i in range(n+1)] for i in rang..