-
[BOJ] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ_JAVASTUDY ๐/์๊ณ ๋ฆฌ์ฆ 2021. 2. 9. 09:57๋ฐ์ํ
[๋ฌธ์ ]
https://www.acmicpc.net/problem/1835218352๋ฒ: ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N, ๋๋ก์ ๊ฐ์ M, ๊ฑฐ๋ฆฌ ์ ๋ณด K, ์ถ๋ฐ ๋์์ ๋ฒํธ X๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ์ ๋ ๊ฐ
www.acmicpc.net
์ด๋ค ๋๋ผ์๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ ๋์์ M๊ฐ์ ๋จ๋ฐฉํฅ ๋๋ก๊ฐ ์กด์ฌํ๋ค. ๋ชจ๋ ๋๋ก์ ๊ฑฐ๋ฆฌ๋ 1์ด๋ค.
์ด ๋ ํน์ ํ ๋์ X๋ก๋ถํฐ ์ถ๋ฐํ์ฌ ๋๋ฌํ ์ ์๋ ๋ชจ๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์ ํํ K์ธ ๋ชจ๋ ๋์๋ค์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ํ ์ถ๋ฐ ๋์ X์์ ์ถ๋ฐ ๋์ X๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ํญ์ 0์ด๋ผ๊ณ ๊ฐ์ ํ๋ค.
์๋ฅผ ๋ค์ด N=4, K=2, X=1์ผ ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ํ๊ฐ ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ๊ฐ์ ํ์.
์ด ๋ 1๋ฒ ๋์์์ ์ถ๋ฐํ์ฌ ๋๋ฌํ ์ ์๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ 2์ธ ๋์๋ 4๋ฒ ๋์ ๋ฟ์ด๋ค. 2๋ฒ๊ณผ 3๋ฒ ๋์์ ๊ฒฝ์ฐ, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ 1์ด๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅํ์ง ์๋๋ค.
[์ ๋ ฅ]
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N, ๋๋ก์ ๊ฐ์ M, ๊ฑฐ๋ฆฌ ์ ๋ณด K, ์ถ๋ฐ ๋์์ ๋ฒํธ X๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N)
๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ์ ๋ ๊ฐ์ ์์ฐ์ A, B๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค.
์ด๋ A๋ฒ ๋์์์ B๋ฒ ๋์๋ก ์ด๋ํ๋ ๋จ๋ฐฉํฅ ๋๋ก๊ฐ ์กด์ฌํ๋ค๋ ์๋ฏธ๋ค. (1 ≤ A, B ≤ N)
๋จ, A์ B๋ ์๋ก ๋ค๋ฅธ ์์ฐ์์ด๋ค.
[์ถ๋ ฅ]
X๋ก๋ถํฐ ์ถ๋ฐํ์ฌ ๋๋ฌํ ์ ์๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ K์ธ ๋ชจ๋ ๋์์ ๋ฒํธ๋ฅผ ํ ์ค์ ํ๋์ฉ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋ค.
์ด ๋ ๋๋ฌํ ์ ์๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ K์ธ ๋์๊ฐ ํ๋๋ ์กด์ฌํ์ง ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
[Solution]
- BFS(๋๋น์ฐ์ ํ์) ๋ฌธ์
- N์ ์ต๋ 300,000 M์ ์ต๋ 1,000,000 ์ด๋ฏ๋ก ์๊ฐ๋ณต์ก๋ O(1,300,000)package boj18352_ํน์ ๊ฑฐ๋ฆฌ์๋์์ฐพ๊ธฐ; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); //๋์์ ๊ฐ์ int m = s.nextInt(); //๋๋ก์ ๊ฐ์ int k = s.nextInt(); //๊ฑฐ๋ฆฌ ์ ๋ณด int x = s.nextInt(); //์ถ๋ฐ ๋์์ ๋ฒํธ int[] distance = new int[300001]; ArrayList<ArrayList<Integer>> linkLst = new ArrayList<ArrayList<Integer>>(); //INIT link list & distance Array for(int i=0; i<=n; i++) { linkLst.add(new ArrayList<Integer>()); distance[i] = -1; } distance[x] = 0; //์ถ๋ฐ๋์->์ถ๋ฐ๋์ ๊ฑฐ๋ฆฌ for(int i=0; i<m; i++) { int a = s.nextInt(); int b = s.nextInt(); linkLst.get(a).add(b); //a->b ๋จ๋ฐฉํฅ } //BFS Queue<Integer> queue = new LinkedList<Integer>(); queue.add(x); //์ถ๋ฐ๋์x while(!queue.isEmpty()) { int tmp = queue.poll(); for(int i=0; i<linkLst.get(tmp).size(); i++) { int next = linkLst.get(tmp).get(i); //๋ฐฉ๋ฌธํ์ ์์ผ๋ฉด if(distance[next] == -1) { distance[next] = distance[tmp]+1; //์ถ๋ฐ๋์์์ next๋์๊น์ง ๊ฑฐ๋ฆฌ queue.add(next); } } } //์ต๋จ๊ฑฐ๋ฆฌ==k check, ๋์๋ฒํธ print boolean chk = false; for(int i=0; i<=n; i++) { if(distance[i] == k) { System.out.println(i); chk = true; } } if(!chk) System.out.println(-1); } }
๋ฐ์ํ'STUDY ๐ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 15649~15652 N๊ณผ M JAVA (0) 2021.02.15 [BOJ] 2887 ํ์ฑ ํฐ๋ JAVA (0) 2021.02.09 [2021 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฝ๋ฉํ ์คํธ] ํฉ์น ํ์ ์๊ธ JAVA (0) 2021.02.04 [SWEA] 2115 ๋ฒ๊ฟ์ฑ์ทจ_JAVA (0) 2021.02.03 [BOJ] 14501 ํด์ฌ_JAVA (0) 2021.02.03