728x90
반응형

그래프 26

[Baekjoon 5427 / Java / 골드4] 불

BFS 문제이다. 불이 1초마다 상하좌우로 1칸씩 퍼지고, 상근이는 1초마다 상하좌우로 1칸씩 이동할 수 있다.건물 끝 4방향의 '.' 빈 공간에 다다르면 탈출에 성공하게 된다. 상근이의 빌딩 탈출에 걸리는 시간을 출력하고, 탈출할 수 없다면 IMPOSSIBLE을 출력하면 된다. import java.io.*;import java.util.*;public class 불_5427 {    static int N; // 테스트 케이스 개수    static int[] dx = {-1, 1, 0, 0};    static int[] dy = {0, 0, -1, 1};    static char[][] tower;    static int[][] visited;    static int w, h;    publ..

Algorithm/BFS 2024.06.08

[Baekjoon 2589 / Java / 골드5] 보물섬

L이 육지고 W가 바다이다.상하좌우 육지로만 이동할 수 있다고 했을 때, 보물지도 내에서 가장 먼 두 육지의 거리를 출력하면 된다.물론 두 육지의 거리는 최단거리여야 한다. import java.io.*;import java.util.*;public class 보물섬_2589 {    // 입력값 저장할 변수, 4방향 탐색할 dx dy 선언    static int N, M;    static char[][] maps;    static int[] dx = {-1, 1, 0, 0};    static int[] dy = {0, 0, -1, 1};    public static void main(String[] args) throws IOException {        BufferedReader br =..

Algorithm/BFS 2024.05.31

[Baekjoon 18429 / Java / 실버3] 근손실

기본 3대중량은 500이다.매일매일 중량은 K 씩 감소한다.매일매일 하나의 운동 키트를 사용하여 중량을 증가시킬 수 있다. 3대중량이 단 하루도 500 미만으로 내려가지 않도록, 운동 키트를 사용하는 순서의 경우의 수를 모두 찾기 결국 중량의 변화는 (K + 키트로 인한 중량 증가량) 이므로, 입력받은 배열에서 미리 K를 빼 주었다.중량 변화가 음수일 경우 500 미만으로 내려가는 것 이므로, 중량 변화량이 N일동안 계속해서 양수인 경우의 수를 찾으면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class 근손실_18429 {        // 결과 저장할 변..

[크래프톤 정글 5기] 플로이드 워셜 알고리즘 + 파이썬 구현

플로이드 워셜(Floyd-Warshall) 알고리즘 - 다익스트라가 특정 정점과 특정 정점까지의 최단 경로를 구하는 알고리즘 이라면, 플로이드 워셜은 모든 정점에서 다른 모든 정점까지의 최단 경로를 모두 찾는 탐색 알고리즘 - 다익스트라는 그리디, 플로이드 워셜은 DP - 노드의 개수가 N개일 때 알고리즘상으로 N번의 단계를 수행하며, 단계마다 O(N2)의 연산을 통해 ‘현재 노드를 거쳐 가는 모든 경로’를 고려한다. 따라서 총 시간 복잡도는 O(N3)이다. 플로이드 워셜(Floyd-Warshall) 알고리즘의 과정 1. 인접 행렬 방식으로 출발노드, 도착노드, 비용을 입력한다. 갈 수 없다면 INF로 설정한다. 2. k(거쳐갈 노드), a(출발 노드), b(도착 노드) 순서로 3중 for문을 만든다. ..

[Baekjoon 1197 / python / 골드4] 최소 스패닝 트리

import heapq import sys input = sys.stdin.readline N, E = map(int, input().split()) # 노드, 간선 graph = [[] for _ in range(N + 1)] # 그래프 입력받기 for _ in range(E): a, b, c = map(int, input().split()) graph[a].append((c, b)) graph[b].append((c, a)) visited = [False] * (N + 1) # 방문체크 리스트 def prim(graph, start): # 그래프, 시작노드 입력받는다, 프림 알고리즘 사용 visited[start] = True # 시작노드 방문체크 distance = 0 # 거리(가중치)를 계산할 변..

Algorithm/Graph 2024.04.03

[Baekjoon 1916 / python / 골드5] 최소비용 구하기

import heapq import sys INF = int(1e9) input = sys.stdin.readline N = int(input()) # 도시 개수 ( 노드 개수 ) E = int(input()) # 버스 개수 ( 간선 개수 ) graph = [[] for _ in range(N + 1)] for _ in range(E): a, b, c = map(int, input().split()) # 출발노드, 도착노드, 거리 입력받기 graph[a].append([c, b]) # (거리, 도착노드) start, end = map(int, input().split()) # 계산해야 할 출발지, 도착지 distance = [INF] * (N + 1) # 최단 경로 리스트 def dijkstra(star..

[Baekjoon 18352 / python / 실버2] 특정 거리의 도시 찾기

import heapq import sys INF = int(1e9) input = sys.stdin.readline N, E, K, start = map(int, input().split()) # 노드, 간선, 찾을거리, 출발노드 graph = [[] for _ in range(N + 1)] for _ in range(E): a, b = map(int, input().split()) # 출발노드, 도착노드 graph[a].append([1, b]) # 거리(1), 도착노드 distance = [INF] * (N + 1) def dijkstra(start): queue = [] heapq.heappush(queue, (0, start)) # 시작노드거리, 시작노드 큐에 삽입 distance[start] ..

[Baekjoon 2637 / python / 골드2] 장난감 조립

from collections import deque import sys input = sys.stdin.readline N = int(input()) # 노드(부품) 개수 E = int(input()) # 간선 개수 indegree = [0 for _ in range(N + 1)] # 진입차수 담을 리스트 needs = [[0] * (N + 1) for _ in range(N + 1)] # 부품별 요구부품량 담을 리스트 graph = [[] for _ in range(N + 1)] # 연결정보 담을 리스트 for _ in range(E): leaf, root, money = map(int, input().split()) graph[root].append([leaf, money]) indegree[lea..

[Baekjoon 2252 / python / 골드3] 줄 세우기

from collections import deque import sys input = sys.stdin.readline N, E = map(int, input().split()) # 노드, 간선 입력받기 indegree = [0 for _ in range(N + 1)] # 진입차수 저장할 리스트 graph = [[] for _ in range(N + 1)] # 연결정보 저장할 리스트 for _ in range(E): # 연결정보 입력받기 root, edge = map(int, input().split()) graph[root].append(edge) indegree[edge] += 1 # 진입차수 추가하기 def solve(): queue = deque() # 덱 사용 result = [] for i ..

728x90
반응형