[백준] 1325번 효율적인 해킹 - Java, 자바
난이도
실버 1
문제
https://www.acmicpc.net/problem/1325
풀이
문제 접근
- 이 문제는 DFS와 BFS로 풀 수 있는 그래프 탐색 문제로, 나는 BFS로 풀었다.
- 처음에 인접행렬을 활용해 문제를 풀었는데 메모리 초과가 나왔다.
N은 10,000보다 작거나 같으므로 시간복잡도를 어림 잡아 계산했을 때 O(N*N = 10억정도)가 나와 이것을 줄여주려고 인접리스트(V+E)로 바꿔 풀었다. - 기본적인 BFS 문제와 동일하게 풀면 된다.
문제 풀이
result = 해킹한 컴퓨터수를 저장하는 배열
visit = 방문 여부 배열
list = 입력값 저장하는 인접리스트
-
인접리스트를 먼저 초기화하고 입력값을 넣는다.
-
각 노드마다 BFS를 수행하며 노드별 해킹 컴퓨터 수를 저장하고, max값을 찾는다.
들어온 값을 큐에 넣고, 방문처리
큐가 비어있지 않을 때
큐에서 값을 하나 빼준다.
그 값에 해당하는 리스트를 반복문 돌려준다.
방문하지 않는 요소라면 방문처리, 큐에 요소 넣기, count++ -
max 값과 값이 동일한 노드를 출력한다.
코드
package 그래프탐색;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ1325 {
static boolean[] visit;
static int max = Integer.MIN_VALUE;
static int n, m;
static int count;
static ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
for(int i=0;i<=n;i++){
list.add(new ArrayList<>());
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
list.get(b).add(a);
}
int[] result = new int[n + 1];
for (int i = 1; i <= n; i++) {
visit = new boolean[n + 1];
count = 0;
bfs(i);
result[i] = count;
max = Math.max(count, max);
}
for (int i = 1; i <= n; i++) {
if (result[i] == max)
sb.append(i+" ");
}
System.out.println(sb);
}
public static void bfs(int x) {
Queue<Integer> q = new LinkedList<>();
q.add(x);
visit[x] = true;
while (!q.isEmpty()) {
int v = q.poll();
for(int i : list.get(v)){
if(!visit[i]){
q.add(i);
visit[i] = true;
count++;
}
}
}
}
}
Author And Source
이 문제에 관하여([백준] 1325번 효율적인 해킹 - Java, 자바), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimmjieun/백준-1325번-효율적인-해킹-Java-자바-y95ttqk0저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)