728x90

BFS 2

[알고리즘]백준 2206: 벽 부수고 이동하기

해결방법최단 경로이므로 BFS로 접근한다.단, 이동하는 도중에 한개의 벽을 부수고 이동할 수 있다는 변수가 있다. 벽의 위치를 저장하고 먼저 벽을 부수고 출발하면 최악의 경우 시간복잡도가 O((N*M)^2)로 시간초과가 발생한다.따라서 3차원 배열로 거리/방문체크를 해야한다. 3차원 배열인 이유는 map 자체가 2차원 배열이고 벽을 부수지 않은 경우/벽을 부순경우를 나눠야 한다. 벽을 부수고 간 것이 먼저 도착하는 경우 벽을 부수지 않고 도착한 것이 방문처리되어 통과되지 못할 수 있기 때문이다. 코드1(거리 비교)import java.util.*;import java.io.*;public class Main_2206_G3_벽부수고이동하기_거리체크 { static int N,M; // N(1 ≤ N ..

알고리즘/백준 2024.08.06

[알고리즘]깊이/너비 우선 탐색

1.그래프 알고리즘 1-1.그래프 정점(vertex)와 edge로 이루어져 있다. 방향성을 가질 수도 있다. 1-2.파이썬으로 그래프를 표현해보자 #vertexList: vertex들을 리스트에 전부 넣은 것 #edgeList: edge들을 리스트에 전부 넣은 것 vertexList=['0','1','2','3','4','5','6'] edgeList=[(0,1),(0,2),(1,0),(1,3),(2,0),(2,4),(2,5),(3,1),(4,2),(4,6),(5,2),(6,4)] adjacencyList=[[] for vertex in vertexList] for edge in edgeList: adjacencyList[edge[0]].append(edge[1]) ※트리도 그래프의 일종이다-! 깊이 우..

알고리즘 2021.01.16
728x90