728x90
시작지점을 기준으로 연결된 부분들에 연락이 갈 때 마지막에 연락받은 사람들 중 가장 큰 값을 출력하는 문제입니다.
시작지점에서 BFS를 사용해서 탐색합니다. 탐색하면서 방문한 곳에 카운트값을 넣어줍니다.
탐색이 종료된 시점에 방문한 곳들을 확인하면서 카운트값이 가장 크면서 수가 가장 큰 값을 출력해주었습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Solution {
static int ans = 0;
static int n;
static int start;
static int[] visit;
static ArrayList<ArrayList<Integer>> al;
static Queue<Integer> q = new LinkedList<>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
for(int t=1; t<=10; ++t) {
st = new StringTokenizer(br.readLine());
al = new ArrayList<>();
visit = new int[101];
for(int i=0; i<101; ++i) {
ArrayList<Integer> temp = new ArrayList<>();
al.add(temp);
}
n = Integer.parseInt(st.nextToken());
start = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for(int i=0; i<n/2; ++i) {
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
al.get(a).add(b);
}
q.add(start);
visit[start] = 1;
while(!q.isEmpty()) {
int cur = q.poll();
for(int i=0; i<al.get(cur).size(); ++i) {
int nextLoc = al.get(cur).get(i);
if(visit[nextLoc] > 0) {
continue;
}
visit[nextLoc] = visit[cur] + 1;
q.add(nextLoc);
}
}
int maxNum = 0;
for(int i=1; i<visit.length; ++i) {
if(visit[i] >= maxNum) {
maxNum = visit[i];
ans = i;
}
}
bw.write("#" + t + " " + ans + "\n");
}
bw.close();
}
}
'알고리즘' 카테고리의 다른 글
[Java] 백준 9252번 LCS2 (0) | 2023.03.02 |
---|---|
[Java] 백준 9251번 LCS (0) | 2023.03.02 |
[Java] SWEA - 창용 마을 무리의 개수 (0) | 2023.03.02 |
[Java] SWEA - 서로소 집합 (0) | 2023.03.02 |
[JavaScript] 프로그래머스 - k진수에서 소수 개수 구하기 (0) | 2023.02.28 |