문제풀이/백준(Boj) 문제풀이 188

[백준][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..

[백준][DFS/BFS] 11724. 연결 요소의 개수 (파이썬/Python)

DFS를 이용한 풀이 방법(재귀 사용) #DFS로 풀기 import sys input = sys.stdin.readline sys.setrecursionlimit(10000) def DFS(x): visited[x] = True #방문한 곳은 방문처리 해준다. for i in graph[x]: if not visited[i]: DFS(i) n, m = map(int,input().split()) # n-정점 개수 / m - 간선 개수 graph = [[] for _ in range(n+1)] visited = [False] * (n+1) cnt = 0 for i in range(m): u, v = map(int,input().split()) graph[u].append(v) graph[v].append(..

[백준][큐 & 덱] 1021. 회전하는 큐 (파이썬/Python)

from collections import deque import sys input = sys.stdin.readline n, m = map(int, input().split()) p = list(map(int, input().split())) dq = deque([i for i in range(1, n+1)]) cnt = 0 for i in p: while True: if dq[0] == i: dq.popleft() break else: if dq.index(i) < len(dq)/2: while dq[0] != i: dq.append(dq.popleft()) cnt += 1 else: while dq[0] != i: dq.appendleft(dq.pop()) cnt += 1 print(cnt) 덱에 ..

[백준][큐 & 덱] 5430. AC (파이썬/Python)

from collections import deque import sys input = sys.stdin.readline t = int(input()) for _ in range(t): p =list(input().rstrip()) n = int(input()) x = deque(input().rstrip()[1:-1].split(",")) flag = 0 #입력받을 수가 0인 경우 빈 리스트를 반환 if n == 0: x = deque() for i in p: if i =="R": x.reverse() elif i == "D": if x: x.popleft() else: print("error") flag = 1 break if flag == 0: print("["+",".join(x)+"]") # 뒤..