๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 5006_Horror List

๋ฟŒ์•ผ._. 2025. 11. 19. 11:42
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/5006)

< Horror List >

 

๋ฌธ์ œ ํ’€์ด 

 

bfs๋ฅผ ํ™œ์šฉํ•˜์—ฌ horror ์˜ํ™”์™€, ์œ ์‚ฌํ•œ ์˜ํ™”๋ฅผ ์ฐพ๋Š”๋‹ค.

 

my solution (Java)

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 _5006_ { // Horror List
	static ArrayList<ArrayList<Integer>> list;
	static int visited[];

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

		int n = Integer.parseInt(st.nextToken());
		int h = Integer.parseInt(st.nextToken());
		int l = Integer.parseInt(st.nextToken());

		st = new StringTokenizer(bf.readLine());

		Queue<Integer> queue = new LinkedList<>();
		visited = new int[n];

		for (int i = 0; i < n; i++) {
			visited[i] = Integer.MAX_VALUE;
		}

		for (int i = 0; i < h; i++) {
			int num = Integer.parseInt(st.nextToken());
			queue.add(num);
			visited[num] = 0;
		}

		list = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			list.add(new ArrayList<>());
		}

		for (int i = 0; i < l; i++) {
			st = new StringTokenizer(bf.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());

			list.get(a).add(b);
			list.get(b).add(a);
		}

		bfs(queue);

		int value = 0, result = 0;

		for (int i = 0; i < n; i++) {
			if (value < visited[i]) {
				value = visited[i];
				result = i;
			}
		}
		System.out.println(result);
	}

	private static void bfs(Queue<Integer> queue) {
		while (!queue.isEmpty()) {
			int num = queue.poll();
			for (int i = 0; i < list.get(num).size(); i++) {
				if (visited[list.get(num).get(i)] == Integer.MAX_VALUE) {
					visited[list.get(num).get(i)] = visited[num] + 1;
					queue.add(list.get(num).get(i));
				}
			}
		}
	}
}
๋ณ€์ˆ˜)
n, h, l : ์˜ํ™”์˜ ๊ฐœ์ˆ˜, horror list์— ํฌํ•จ๋œ ์˜ํ™”์˜ ์ˆ˜, ์œ ์‚ฌ์„ฑ์˜ ๋ฐ์ดํ„ฐ ์ˆ˜
visited : Horror Index
list : ์œ ์‚ฌํ•œ ์˜ํ™” ์ •๋ณด
value, result : Horror Index๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฐ’, Horror Index๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์˜ํ™”

 

Main

์˜ํ™”์˜ ๊ฐœ์ˆ˜, horror list์— ํฌํ•จ๋œ ์˜ํ™”์˜ ์ˆ˜, ์œ ์‚ฌ์„ฑ์˜ ๋ฐ์ดํ„ฐ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์˜ํ™”์˜ ๊ฐœ์ˆ˜๋งŒํผ Horror Index๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด Integer.MAX_VALUE๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. horror list์— ํฌํ•จ๋œ ์˜ํ™”์˜ ์ˆ˜๋งŒํผ ์˜ํ™” ID๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ queue์— ์ €์žฅํ•˜๊ณ , Horror Index๋ฅผ 0์œผ๋กœ ์ €์žฅํ•œ๋‹ค. ์œ ์‚ฌ์„ฑ์˜ ๋ฐ์ดํ„ฐ ์ˆ˜๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ArrayList์— ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ €์žฅํ•œ๋‹ค. bfs๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

์ตœ์ข… visited๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ horror Index๊ฐ€ ๋†’์€ ๊ฐ’ ์ค‘ ID๊ฐ€ ๋‚ฎ์€ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

bfs

Queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

1) queue poll

2) ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด visited ๊ฐ’์„ ์—ฐ๊ฒฐ๋œ ์˜ํ™”์˜ horror index+1๋กœ ์—…๋ฐ์ดํŠธํ•œ ํ›„ queue์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 26111_Parentheses Tree  (0) 2025.11.18
[Baekjoon] 11254_Hydraulic Arm  (0) 2025.11.17
[Baekjoon] 5957_Cleaning the Dishes  (0) 2025.11.14
[Baekjoon] 14540_Railway Station  (0) 2025.11.12
[Baekjoon] 4992_Hanafuda Shuffle  (0) 2025.11.10