๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 24447_์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 4

๋ฟŒ์•ผ._. 2023. 6. 2. 17:54

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/24447)

< ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 4 >

 

๋ฌธ์ œ ํ’€์ด

 

bfs๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๋…ธ๋“œ์˜ ๊นŠ์ด์™€ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ €์žฅํ•ด ์ค€๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ๋…ธ๋“œ์˜ ๊นŠ์ด์™€ ๋ฐฉ๋ฌธ ์ˆœ์„œ, ๊ฒฐ๊ณผ ๊ฐ’์„ ์ €์žฅํ•  ๋•Œ long ๊ฐ’์œผ๋กœ ์„ ์–ธํ•ด ์ค˜์•ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class _24447_ {
	static ArrayList<ArrayList<Integer>> arr;
	static long t[], d[];

	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 m=Integer.parseInt(st.nextToken());
		int r=Integer.parseInt(st.nextToken())-1;
		
		arr=new ArrayList<>();
		t=new long[n];
		d=new long[n];
		
		for(int i=0; i<n; i++) {
			arr.add(new ArrayList<>());
			d[i]=-1;
		}
		
		for(int i=0; i<m; i++) {
			st=new StringTokenizer(bf.readLine());
			int a=Integer.parseInt(st.nextToken())-1;
			int b=Integer.parseInt(st.nextToken())-1;
			arr.get(a).add(b);
			arr.get(b).add(a);
		}
		
		for(int i=0; i<n; i++) {
			Collections.sort(arr.get(i));
		}
		
		d[r]=0;
		t[r]=1;
		bfs(r);
		
		long result=0;
		for(int i=0; i<n; i++) {
			result+=d[i]*t[i];
		}
		System.out.println(result);
	}

	private static void bfs(int r) {
		Queue<Integer>queue=new LinkedList<>();
		queue.add(r);
		long t_num=t[r];
		
		while(!queue.isEmpty()) {
			int num=queue.poll();
			for(int i=0; i<arr.get(num).size(); i++) {
				int temp=arr.get(num).get(i);
				if(d[temp]==-1){
					d[temp]=d[num]+1;
					t[temp]=++t_num;
					queue.add(temp);
				}
			}
		}
	}
}

 

Main

- ์ •์ ์˜ ์ˆ˜ (n), ๊ฐ„์„ ์˜ ์ˆ˜ (m), ์‹œ์ž‘ ์ •์  (r) ์ž…๋ ฅ

- arr : ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

   t:  ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ

   d : ๋…ธ๋“œ์˜ ๊นŠ์ด (๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด -1๋กœ ์ดˆ๊ธฐํ™”)

- ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„ ์ €์žฅ ํ›„ ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์œ„ํ•ด ์ •๋ ฌ

- ์‹œ์ž‘ ์ •์ ์˜ ๋…ธ๋“œ์˜ ๊นŠ์ด๋Š” 0์ด๊ณ  ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋Š” 1๋กœ ์ดˆ๊ธฐํ™” ํ›„ bfs ํ•จ์ˆ˜ ํ˜ธ์ถœ

- result : ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ x ๋…ธ๋“œ์˜ ๊นŠ์ด

 

bfs(์‹œ์ž‘ ์ •์  r)

- queue์— ์‹œ์ž‘ ์ •์  ์ถ”๊ฐ€ ๋ฐ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์œ„ํ•ด ์ดˆ๊ธฐ๊ฐ’ ์ €์žฅ

- queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> ์ธ์ ‘ ์ •์ ์˜ ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต -> ๋…ธ๋“œ์˜ ๊นŠ์ด๊ฐ€ -1์ด๋ฉด ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๋…ธ๋“œ์˜ ๊นŠ์ด ์ €์žฅ ๋ฐ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ ์ €์žฅ ํ›„ queue์— ์ถ”๊ฐ€

* ๋…ธ๋“œ์˜ ๊นŠ์ด๋Š” ์ „ ๋…ธ๋“œ์˜ ๊นŠ์ด +1์ด๋‹ค.

 


๋งˆ๋ฌด๋ฆฌ๐Ÿค”

 

long ๊ฐ’ ๋ฒ”์œ„ ๋•Œ๋ฌธ์— ํ‹€๋ ธ์—ˆ๋‹ค...