๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/5214
โธ ๋ฌธ์
์์ฃผ ๋จผ ๋ฏธ๋์ ์ฌ๋๋ค์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋์ค๊ตํต์ ํ์ดํผํ๋ธ์ด๋ค. ํ์ดํผํ๋ธ ํ๋๋ ์ญ K๊ฐ๋ฅผ ์๋ก ์ฐ๊ฒฐํ๋ค. 1๋ฒ์ญ์์ N๋ฒ์ญ์ผ๋ก ๊ฐ๋๋ฐ ๋ฐฉ๋ฌธํ๋ ์ต์ ์ญ์ ์๋ ๋ช ๊ฐ์ผ๊น?
โธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ญ์ ์ N๊ณผ ํ ํ์ดํผํ๋ธ๊ฐ ์๋ก ์ฐ๊ฒฐํ๋ ์ญ์ ๊ฐ์ K, ํ์ดํผํ๋ธ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100,000, 1 ≤ K, M ≤ 1000)
๋ค์ M๊ฐ ์ค์๋ ํ์ดํผํ๋ธ์ ์ ๋ณด๊ฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ด K๊ฐ ์ซ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ์ด ์ซ์๋ ๊ทธ ํ์ดํผํ๋ธ๊ฐ ์๋ก ์ฐ๊ฒฐํ๋ ์ญ์ ๋ฒํธ์ด๋ค.
โธ ์ถ๋ ฅ
์ฒซ์งธ ์ค์ 1๋ฒ์ญ์์ N๋ฒ์ญ์ผ๋ก ๊ฐ๋๋ฐ ๋ฐฉ๋ฌธํ๋ ์ญ์ ๊ฐ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ๊ฐ ์ ์๋ค๋ฉด -1์ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ๊ณจ๋ 2
- ๐ ๋ฌธ์ ์ ํ : ๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์, ๋๋น ์ฐ์ ํ์
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
๋๋น ์ฐ์ ํ์(BFS)๊ณผ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ์ฌ,
ํ์ดํผ ํ๋ธ๋ฅผ ํ์น์ญ ๊ฐ๋ ์ผ๋ก ๊ทธ๋ํ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
๊ฐ ํ์ดํผ ํ๋ธ๋ k๊ฐ์ ์ญ์ ์ง์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์๋๋ผ, ํ์ดํผ ํ๋ธ ๋ ธ๋๋ฅผ ํ๋์ ํ์น์ญ์ผ๋ก ์ถ๊ฐํ์ฌ ๊ฐ ์ญ๊ณผ ์ฐ๊ฒฐํ๋ค.
์์ ์ ๋ ฅ 1์ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ณธ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
์ด๋ ๊ฒ ํ๋ฉด, ํ์ดํผ ํ๋ธ ๋ ธ๋๋ฅผ ์ง๋ ๋๋ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํค์ง ์๊ณ , ์ค์ ์ญ์ ์ง๋ ๋๋ง ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ฐฉ์์ผ๋ก ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ์ ์๋ค.
๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, ์ค์ ์ญ๋ผ๋ฆฌ๋ ์ง์ ์ฐ๊ฒฐ๋์ด ์์ง ์๊ณ , ํ์ดํผ ํ๋ธ ๋ ธ๋์ ์ญ ๋ ธ๋๋ผ๋ฆฌ๋ง ์ฐ๊ฒฐ๋์ด ์๋ค.
๋ฐ๋ผ์ 1๋ฒ ์ญ์์ N๋ฒ ์ญ์ผ๋ก ์ด๋ํ ๋, ๋๋น ์ฐ์ ํ์์ ์ํํ๋ฉด ๊ฐ์ฅ ๋จผ์ ๋์ฐฉํ ๋ ธ๋๊ฐ ์ต๋จ ๊ฒฝ๋ก๊ฐ ๋๋ค.
์ ํ์ด๋ฅผ ์ฝ๋๋ก ์์ฑํด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 165668KB
์๊ฐ : 764ms
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 Main {
static int n, k, m;
static ArrayList<ArrayList<Integer>> list;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken()); // ์ญ์ ์
k = Integer.parseInt(st.nextToken()) ; // ํ์ดํผํ๋ธ๊ฐ ์ฐ๊ฒฐํ๋ ์ญ์ ๊ฐ์
m = Integer.parseInt(st.nextToken()); // ํ์ดํผํ๋ธ ๊ฐ์
list = new ArrayList<>();
// 1~n ์ญ, n+1~m ํ์ดํผํ๋ธ
for (int i = 0; i <= n+m; i++) {
list.add(new ArrayList<>());
}
int hyperTube, node;
for (int i = 1; i <= m; i++) {
st = new StringTokenizer(br.readLine());
hyperTube = n+i;
for (int j = 0; j < k; j++) {
node = Integer.parseInt(st.nextToken());
list.get(node).add(hyperTube);
list.get(hyperTube).add(node);
}
}
int ans = bfs(1);
System.out.println(ans);
}
private static int bfs(int start) {
Queue<Integer> que = new LinkedList<>();
int[] checked = new int[n+m+1]; // ๊ฑฐ์ณ๊ฐ ํ์ ๊ธฐ๋ก
que.offer(start);
checked[start] = 1;
while (!que.isEmpty()) {
Integer now = que.poll();
if (now == n) { // n๋ฒ์งธ ๋์ฐฉ
return checked[now];
}
for (Integer next : list.get(now)) {
if (checked[next] == 0) { // ๋ฐฉ๋ฌธ X
// ํ์ดํผํ๋ธ ๋
ธ๋๋ก ๊ฐ ๋ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๋๋ฆฌ์ง ์๊ณ ,
// ์ค์ ๋
ธ๋๋ก ๊ฐ ๋์๋ง ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๋๋ฆฐ๋ค.
if (next <= n) { // ์ญ
checked[next] = checked[now]+1;
} else { // ํ์ดํผํ๋ธ
checked[next] = checked[now];
}
que.offer(next);
}
}
}
return -1;
}
}
์ถ์ฒ๋ฐ์ ํ์๋ ๋ฌธ์ ์ธ๋ฐ, ์ต๊ทผ์ ๋ค์ ํ๋ฉด์ ๊ทธ๋ํ ๋ฌธ์ ์ค์์๋ ์ ์ ํ๊ณ ์๋ก์ด ๋ฌธ์ ๊ฐ์์ ํฌ์คํ
ํด ๋ณธ๋ค !
์ฒ์ ํ ๋, ์์ด๋์ด๊ฐ ๋ ์ค๋ฅด์ง ์์ ๋ค๋ฅธ ์ฌ๋์ ์์ด๋์ด๋ฅผ ์ฐธ๊ณ ํ์ฌ ํด๊ฒฐํ๋ ๊ธฐ์ต์ด ์๋ค.
๊ทธ๋ ๋น์์๋ ํ์ด๋ฅผ ๋ด๋ ์ด๋ ต๋ค๊ณ ์๊ฐํ๋๋ฐ, ์ด๋ฒ์๋ ๊ทธ๋๋ณด๋ค ์์กฐ๋กญ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ด ๋ฟ๋ฏํ๋ค. ๐โญ
๐ reference
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_12014] ์ฃผ์, LIS (0) | 2025.02.11 |
---|---|
[Boj_22254] ๊ณต์ ์ปจ์คํดํธ ํธ์ (1) | 2025.02.07 |
[Boj_16509] ์ฅ๊ตฐ (0) | 2025.01.30 |
[Boj_1854] K๋ฒ์งธ ์ต๋จ๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2025.01.25 |
[Boj_20444] ์์ข ์ด์ ๊ฐ์ (1) | 2025.01.20 |