https://www.acmicpc.net/problem/5567
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static int arr[][]; // ์น๊ตฌ ๊ด๊ณ
public static boolean visit[]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ
public static int n; // ๋๊ธฐ ์
public static int m; // ๋ฆฌ์คํธ ๊ธธ์ด
public static int count = 0; // ์ด๋ํ ์น๊ตฌ ์
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(bf.readLine());
m = Integer.parseInt(bf.readLine());
arr = new int[n+1][n+1];
visit = new boolean[n+1];
for(int i=0; i<m; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
arr[a][b] = arr[b][a] = 1; // ์น๊ตฌ ๊ด๊ณ ํ์
}
for(int i=2; i<=n; i++) {
if(arr[1][i] == 1) { // ์๊ทผ์ด์ ์น๊ตฌ์ธ ๊ฒฝ์ฐ
if(!visit[i]) { // ์๊ทผ์ด์ ์น๊ตฌ์ธ๋ฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ
count ++; // ์ด๋
visit[i] = true; // ๋ฐฉ๋ฌธ ํ์
}
// ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ ์ฐพ๊ธฐ - ์๊ทผ์ด์ ์ฐ๊ฒฐ๋ ์ ์ ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ ์ ์ฐพ๊ธฐ.
for(int j=2; j<=n; j++) {
if(arr[i][j] == 1 && !visit[j]) {
count ++; // ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ๋ ์ด๋
visit[j] = true; // ๋ฐฉ๋ฌธ ํ์
}
}
}
}
System.out.println(count);
bf.close();
}
}
ํ์ด
๊ทธ๋ํ - ์ ์ , ๊ฐ์ ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ค.
๋ฌธ์ ์ ์์ ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
์ ๊ทธ๋ฆผ์์ 1๋ฒ์ด ์๊ทผ์ด๊ณ , ์๊ทผ์ด๋ ์น๊ตฌ์ ์น๊ตฌ์ ์น๊ตฌ ๊น์ง๋ง ์ด๋๋ฅผ ํ ์ ์๋ค.
์ฆ, ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(1->2 , 2->1)์ด๋ฉฐ, ์น๊ตฌ(๊ฐ์ ) ์ ์น๊ตฌ์ ์น๊ตฌ(๊ฐ์ ์ ๊ฐ์ )์ธ์ง ๋น๊ตํ๋ฉฐ ์ด๋ํ๋ค.
์๊ทผ์ด์ 2๋ฒ, 3๋ฒ์ ์น๊ตฌ๊ณ 4๋ฒ์ 3๋ฒ์ ์น๊ตฌ์ด๊ธฐ ๋๋ฌธ์ ์น๊ตฌ(3)์ ์น๊ตฌ(4)์ฌ์ ์ด๋๊ฐ ๊ฐ๋ฅํ์ง๋ง,
5๋ฒ๊ณผ 6๋ฒ์ ๊ด๊ณ๊ฐ ์์ด์ ์ด๋๋ฅผ ํ ์ ์๋ค.
๋ฐ๋ผ์ ์ด๋ํ ์ ์๋ ๋ฒํธ๋ 2, 3, 4 3๋ช ์ด๋ค.
๋จผ์ ์ธ์ ํ๋ ฌ์ ๊ตฌํํ๋ค.(dfs์ผ์ค ์๊ณ static์ผ๋ก ๋ณ์๋ค์ ์ ์ธํ๋ค ...)
๋ฒํธ๋ 1๋ฒ๋ถํฐ ์์ํ๋ฏ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ n+1๋ก ์ก๋๋ค.
arr = new int[n+1][n+1];
visit = new boolean[n+1];
for(int i=0; i<m; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
arr[a][b] = arr[b][a] = 1; // ์น๊ตฌ ๊ด๊ณ ํ์
}
๊ทธ ํ 2๋ฒ๋ถํฐ ์๊ทผ์ด์ ์น๊ตฌ์ธ์ง ํ๋จํ๋ค.
๋ฐ์ฝ ์๊ทผ์ด์ ์น๊ตฌ์ธ ๊ฒฝ์ฐ(arr[1][i] == 1)
- ๊ทธ ์น๊ตฌ๋ ์ด๋ํ๊ณ ์ด๋ํ ์น๊ตฌ์ด๋ฏ๋ก ๋ฐฉ๋ฌธํ์๋ฅผ ํ๋ค.
- ๊ทธ ํ ์น๊ตฌ์ ์น๊ตฌ๋ฅผ ํ๋จํด์ผ ํ๋ฏ๋ก, ์ด ์น๊ตฌ์ ์ฐ๊ฒฐ๋์ด์๋ ์น๊ตฌ๋ฅผ ์ฐพ๋๋ค. (arr[i][j] == 1 && ! visit[j])
for(int i=2; i<=n; i++) {
if(arr[1][i] == 1) { // ์๊ทผ์ด์ ์น๊ตฌ์ธ ๊ฒฝ์ฐ
if(!visit[i]) { // ์๊ทผ์ด์ ์น๊ตฌ์ธ๋ฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ
count ++; // ์ด๋
visit[i] = true; // ๋ฐฉ๋ฌธ ํ์
}
// ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ ์ฐพ๊ธฐ - ์๊ทผ์ด์ ์ฐ๊ฒฐ๋ ์ ์ ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ ์ ์ฐพ๊ธฐ.
for(int j=2; j<=n; j++) {
if(arr[i][j] == 1 && !visit[j]) {
count ++; // ์๊ทผ์ด ์น๊ตฌ์ ์น๊ตฌ๋ ์ด๋
visit[j] = true; // ๋ฐฉ๋ฌธ ํ์
}
}
}
}
์๊ทผ์ด์ ์น๊ตฌ์ ์น๊ตฌ(arr[i][j] == 1) ์ด๊ณ , ์ด๋ํ์ง ์์ ์น๊ตฌ(๋ฐฉ๋ฌธํ์๊ฐ ๋์ด ์์ง ์๋ ์น๊ตฌ)์ธ ๊ฒฝ์ฐ,
๊ทธ ์น๊ตฌ๊น์ง ์ด๋๋ฅผ ํ๊ณ ๋ฐฉ๋ฌธ ํ์๋ฅผ ํ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2998๋ฒ: 8์ง์(๋ฌธ์์ด, ๊ตฌํ) (0) | 2020.03.27 |
---|---|
[๋ฐฑ์ค] 9933๋ฒ: ๋ฏผ๊ท ์ด์ ๋น๋ฐ๋ฒํธ(๋ฌธ์์ด) (0) | 2020.03.27 |
[Codeforces] 1167A: Telephone Number (0) | 2020.03.26 |
Java ๊ด๋ จ ๋ฉด์ ์ค๋น 2 (0) | 2020.03.26 |
Java ๊ด๋ จ ๋ฉด์ ์ค๋น 1 (2) | 2020.03.26 |
๋๊ธ