🌞Algorithm/🔥Baekjoon

[Baekjoon] 3182_한동이는 공부가 하기 싫어!

뿌야._. 2023. 12. 28. 14:58

Silver III

문제(출처: https://www.acmicpc.net/problem/3182)

< 한동이는 공부가 하기 싫어! >

 

문제 풀이 

 

dfs를 통해 연결된 사람 수를 구한다.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class _3182_ { // 한동이는 공부가 하기 싫어!
	static int arr[], d[];

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(bf.readLine());

		arr = new int[n + 1];
		d = new int[n + 1];


		for (int i = 1; i <= n; i++) {
			arr[i] = Integer.parseInt(bf.readLine());
		}

		for (int i = 1; i <= n; i++) {
			boolean visited[] = new boolean[n + 1];
			visited[i] = true;
			d[i]= dfs(i, visited);
		}

		int idx = Integer.MIN_VALUE;
		int answer = 0;
		for (int i = 1; i <= n; i++) {
			if (idx < d[i]) {
				idx = d[i];
				answer = i;
			}
		}
		System.out.println(answer);
	}

	private static int dfs(int i, boolean visited[]) {
		if (!visited[arr[i]]) {
			visited[arr[i]] = true;
			return dfs(arr[i], visited) + 1;
		}
		return 1;
	}
}
변수)
n : 정수 N
arr : 선배 대답
d : 연결된 사람 수
idx : 연결된 최대 사람 수
answer : 가장 많이 연결된 사람 번호

 

모든 사람을 각각 dfs 탐색을 통해 연결된 사람 수를 구한다. 그 후 가장 많이 연결된 사람의 번호를 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 14469_소가 길을 건너간 이유 3  (1) 2024.01.02
[Baekjoon] 11501_주식  (1) 2023.12.29
[Baekjoon] 2847_게임을 만든 동준이  (0) 2023.12.27
[Baekjoon] 28432_끝말잇기  (0) 2023.12.26
[Baekjoon] 10282_해킹  (0) 2023.12.25