Algorithm/Graph Search Algorithm(30)
-
BOJ G4 1504 특정한 최단 경로 JAVA
1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net 문제 읽기 방향성이 없는 그래프가 주어진다. 양방향이어도 다익스트라를 사용하는 데에는 전혀 문제가 없고, 단지 처음에 그래프를 인접 리스트로 입력 받을 때, 양 쪽에 다 넣어주면 된다. 일단 이 문제에서는 주어지는 두 노드를 반드시 방문하면서 1 → N까지의 최소 거리를 구해야 한다. 즉, 주어지는 두 노드를 mid1, mid2라고 한다면, 1 → mid1 → mid2 → N 또는 1 → mid2 → mid1 → N ..
2024.01.21 -
BOJ G3 1238 파티 JAVA
1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 문제 읽기 처음 문제를 봤을 때.. 다익스트라 같은데, 다익스트라를 너무 많이 돌리는데? 싶었다. N명의 학생이, 각각 N개의 마을을 출발점으로 X까지 최소 거리 구하려면 다익스트라 N번, 게다가 X를 출발점으로 다른 N개의 마을까지 최소 거리 구하려면 다익스트라 1번.. 총 N+1번의 다익스트라인데? 싶었다. 그래도 N이 1000이라서 일단 괜찮을 것 같아서 (조금 찜찜하지만) N+1번의 다익스트라로 문제를 풀었다. 문제 풀기 딱..
2024.01.20 -
BOJ G5 1916 최소비용구하기 JAVA
1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net 문제 읽기 어제 공부했던 다익스트라 문제이다. 연습 삼에 몇 문제 정도 더 풀어보려고 한다. 다익스트라 개념과 동작 과정을 이해하고 싶으면 다음 포스팅을 참고하면 좋다! 다익스트라, Dijkstra Algorithm 코딩 문제에서 많이 볼 수 있는 그래프와 관련된 알고리즘을 공부해보자. 그래프에서 최단 거리를 구하는 알고리즘은 다음과 같은 것들이 있다. 💡 그래프의 최단 거리 구하는 알고리즘 1. 다익 rue-mi.tistory..
2024.01.20 -
다익스트라, Dijkstra Algorithm
코딩 문제에서 많이 볼 수 있는 그래프와 관련된 알고리즘을 공부해보자. 그래프에서 최단 거리를 구하는 알고리즘은 다음과 같은 것들이 있다. 💡 그래프의 최단 거리 구하는 알고리즘 1. 다익스트라, Dijkstra 2. 벨만-포드, Bellman-Ford 3. 플로이드-와샬, Floyd-Wrasahll 그 중에서 가장 많이 쓰이는 다익스트라에 대해 먼저 알아보자! 다익스트라 알고리즘, Dijkstra Algorithm 💡 다익스트라, Dijkstra 그래프의 최단 경로를 구하는 알고리즘 중 하나로, 하나의 정점에서 다른 모든 노드까지의 최단 거리를 구할 수 있는 알고리즘이다. 단, 음수 가중치는 없어야 한다. (음수 가중치가 있다면 벨만 포드 사용) [시간복잡도] V : 노드의 숫자, E : 간선의 숫자 ..
2024.01.20 -
BOJ P5 3197 백조의 호수 BFS+이분탐색 JAVA
3197번: 백조의 호수 입력의 첫째 줄에는 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1500. 다음 R개의 줄에는 각각 길이 C의 문자열이 하나씩 주어진다. '.'은 물 공간, 'X'는 빙판 공간, 'L'은 백조가 있는 공간으로 나타낸다. www.acmicpc.net 문제 읽기 처음에 문제를 읽었을 때는 일반적인 시뮬레이션 문제 같았다. 단순하게 생각하면 다음과 같은 구조로 풀이를 할 수 있을 것이다. 모든 판을 순회하며 물과 인접한 얼음에 없앤다는 표식을 남긴다 다시 모든 판을 순회하며 표식이 있는 얼음을 녹여 물로 만든다 위 과정이 끝났으면 백조 한 마리의 위치에서 BFS를 수행하여, 물로만 이동했을 때 다른 백조까지 도달하는 지 파악한다 두 백조가 만났다면 끝내고, 만나지 않았지만 1-3 과..
2024.01.12 -
BOJ G4 4179 불! JAVA
4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자 www.acmicpc.net 문제 읽기 문제를 처음 읽었을 땐 별 문제 없이 구현할 수 있을 줄 알았지만.. 자잘한 실수와 문제를 제대로 읽지 않은 게 원인이 되어 조금 헤맸다. 문제 해결 자료구조 char[][] map Queue 두 개 지훈이 이동 Q 불 이동 Q 실수한 부분 불 퍼지는 방식 이상하게 함 처음에는 이상하게 생각해서 지훈이 큐랑 불 큐랑 두 개 만들고 지훈이 큐에서 하나씩 뺄 때마다 불 큐에서도 하나 빼서 상하좌우 이동함. 결국 depth 다 꼬여서 답 안..
2023.07.13