본문 바로가기

graph34

[Problem Solving] BOJ 17142: 연구소 3 문제 출처: https://www.acmicpc.net/problem/17142 N*N 격자가 있다.0: 통로1: 벽2: 바이러스이다. 바이러스 중에서 활성화된 바이러스를 M개 골랐을 때, 벽이 아닌 공간에 모두 퍼지는 시간의 최솟값을 구하는 문제이다.모든 조합에 대해서 다음을 수행한다.1. 조합을 고른다.2. N*N distance의 모든 원소를 무한대로 설정한다.3. 조합에서 각각의 바이러스 지점에서 bfs를 수행한다. (바이러스는 벽이 아닌 모든 곳으로 퍼질 수 있다.)4. 격자에서 모든 통로, 그리고 활성화된 바이러스 지점에 바이러스가 퍼질 때 까지 걸리는 최소 시간 중 최댓값을 구한다.5. 4에서 구한값과 이전 조합에서 구한 값을 비교해서 벽이 아닌 공간에 모두 퍼지는 시간의 최솟값을 갱신한다.. 2025. 5. 12.
[Problem Solving] BOJ 17471: 게리멘더링 문제 링크: https://www.acmicpc.net/problem/17471 그래프에서 지역구를 두 개로 나눈다. 한 지역구에는 적어도 하나의 노드를 가져야 하고, 한 지역구의 노드들을 하나의 연결요소여야 한다. 일단 모든 노드를 방문하는 bfs를 수행하는 데, bfs 호출 횟수가 3번 이상이라면, 그래프가 3개 이상으로 쪼개져있어서 두 개의 지역구로 나누는 것이 불가능 하다. 이 때는 -1을 출력하고 프로그램을 종료한다. bfs 호출 횟수가 정확히 2번이라면, 쪼개진 두 개의 그래프의 노드의 인구의 합의 차이가 답이 된다. bfs 호출 횟수가 정확히 한 번이라면, 전체 노드를 두 쪽을 내는 모든 경우의 수를 따져야한다.노드 집합을 분리해서 하나는 v1에 다른 하나는 v2에 저장한다.v1의 노드들이 .. 2025. 3. 30.
[Problem Solving] BOJ 1743: 음식물 피하기 문제 링크: https://www.acmicpc.net/problem/1743 인접한 쓰레기를 하나로 묶었을 때, 가장 큰 쓰레기 더미의 크기를 출력하는 프로그램이다.BFS를 수행해서 쓰레기 더미의 크기를 구해서 가장 큰 것을 출력하면 된다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { public static class Point { public int y; public int x; public Point(int y, int x) { this.y.. 2025. 3. 21.
[Probelm Solving] BOJ 1865: 웜홀 문제 링크: https://www.acmicpc.net/problem/1865 양방향 간선 (SE, 가중치 T)을 입력 받고, 일방향 간선(S->E, 가중치 -T)를 입력 받은 후, 벨만 포드 알고리즘을 수행하여,음수 사이클(한 지점에서 출발을 하여서 시간여행을 하기 시작하여 다시 출발을 하였던 위치로 돌아왔을 때, 출발을 하였을 때보다 시간이 되돌아가 있는 경우)이 있으면 YES, 없으면 NO를 출력하는 프로그램을 만들면 된다. 시간 복잡도를 최소화 하기 위해서, 모든 노드가 아닌, 가장 최근에 업데이트가 발생한 노드에서 또 업데이트가 발생(음수사이클)하는지 확인한 후, 발생한다면 bellmanFord함수가 false를 return, 발생하지 않는다면 true를 return하도록 한다. #include.. 2025. 3. 5.
[Problem Solving] BOJ 5427 : 불 문제 링크 : https://www.acmicpc.net/problem/5427 건물에서 탈출해야 하는 데, 불이 탈출구까지 번지기 전에 탈출할 수 있는지, 그렇다면 최소 몇 초만에 탈출할 수 있는지 구하는 문제이다. 1. 사람에 대한 BFS를 수행하여, 사람이 처음 존재하는 격자에서 다른 격자까지 가는데 걸리는 최소 시간을 각 격자마다 구한다. 사람은 불이 최초로 난 곳과 벽을 제외한 모든 곳으로 움직일 수 있다.2. 불에 대한 BFS를 수행하여, 불이 있는 곳으로 부터 각 격자마다 번지게 되는 최소 시간을 계산한다. 불은 벽을 제외한 모든 곳에 번질 수 있다.3. 건물의 탈출구까지 불이 번지기 전에 지훈이가 도달할 수 있는 경우, 도달할 수 있는 시간 중 최소 시간을 구해서 출력한다. 그렇지 못한다면.. 2025. 2. 26.
[Problem Solving] BOJ 2623 : 음악 프로그램 문제 링크 : https://www.acmicpc.net/problem/2623 노드의 수와 순서의 수가 N과 M으로 주어진다.N이 6이고, M이 3일 때, M개의 순서가1 4 36 2 5 42 3으로 주어진다면이는1 -> 4, 1 -> 3, 4 ->36 -> 2, 6 -> 5, 6 -> 4, 2 -> 5, 2 -> 4, 5 -> 42 -> 3으로 그래프로 표현할 수 있다.이를 위상정렬 한 결과를 출력하면 된다.위상정렬을 수행했는데 그 결과가 N과 같지 않다면 위상정렬 불가능한 그래프이기 때문에 0을 출력하면 된다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.. 2025. 2. 19.