[Gold IV] ๊ฑฐ์ง๋ง - 1043
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 14352 KB, ์๊ฐ: 128 ms
๋ถ๋ฅ
์๋ฃ ๊ตฌ์กฐ, ๋ถ๋ฆฌ ์งํฉ, ๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์
์ ์ถ ์ผ์
2024๋ 1์ 3์ผ 16:32:22
๋ฌธ์ ์ค๋ช
์ง๋ฏผ์ด๋ ํํฐ์ ๊ฐ์ ์ด์ผ๊ธฐ ํ๋ ๊ฒ์ ์ข์ํ๋ค. ํํฐ์ ๊ฐ ๋๋ง๋ค, ์ง๋ฏผ์ด๋ ์ง๋ฏผ์ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ด์ผ๊ธฐ๋ฅผ ํ๋ค. ์ง๋ฏผ์ด๋ ๊ทธ ์ด์ผ๊ธฐ๋ฅผ ๋งํ ๋, ์๋ ๊ทธ๋๋ก ์ง์ค๋ก ๋งํ๊ฑฐ๋ ์์ฒญ๋๊ฒ ๊ณผ์ฅํด์ ๋งํ๋ค. ๋น์ฐํ ๊ณผ์ฅํด์ ์ด์ผ๊ธฐํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ฌ๋ฏธ์๊ธฐ ๋๋ฌธ์, ๋๋๋ก์ด๋ฉด ๊ณผ์ฅํด์ ์ด์ผ๊ธฐํ๋ ค๊ณ ํ๋ค. ํ์ง๋ง, ์ง๋ฏผ์ด๋ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง๊ธฐ๋ ์ซ์ดํ๋ค. ๋ฌธ์ ๋ ๋ช๋ช ์ฌ๋๋ค์ ๊ทธ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ์ฌ๋๋ค์ด ํํฐ์ ์์ ๋๋, ์ง๋ฏผ์ด๋ ์ง์ค์ ์ด์ผ๊ธฐํ ์ ๋ฐ์ ์๋ค. ๋น์ฐํ, ์ด๋ค ์ฌ๋์ด ์ด๋ค ํํฐ์์๋ ์ง์ค์ ๋ฃ๊ณ , ๋๋ค๋ฅธ ํํฐ์์๋ ๊ณผ์ฅ๋ ์ด์ผ๊ธฐ๋ฅผ ๋ค์์ ๋๋ ์ง๋ฏผ์ด๋ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง๊ฒ ๋๋ค. ์ง๋ฏผ์ด๋ ์ด๋ฐ ์ผ์ ๋ชจ๋ ํผํด์ผ ํ๋ค.
์ฌ๋์ ์ N์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ ์ฌ๋์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํํฐ์ ์ค๋ ์ฌ๋๋ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ง๋ฏผ์ด๋ ๋ชจ๋ ํํฐ์ ์ฐธ๊ฐํด์ผ ํ๋ค. ์ด๋, ์ง๋ฏผ์ด๊ฐ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง์ง ์์ผ๋ฉด์, ๊ณผ์ฅ๋ ์ด์ผ๊ธฐ๋ฅผ ํ ์ ์๋ ํํฐ ๊ฐ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๋์ ์ N๊ณผ ํํฐ์ ์ M์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ ์ฌ๋์ ์์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ง์ค์ ์๋ ์ฌ๋์ ์๊ฐ ๋จผ์ ์ฃผ์ด์ง๊ณ ๊ทธ ๊ฐ์๋งํผ ์ฌ๋๋ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ฌ๋๋ค์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ ์๋ก ์ฃผ์ด์ง๋ค.
์ ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ๊ฐ ํํฐ๋ง๋ค ์ค๋ ์ฌ๋์ ์์ ๋ฒํธ๊ฐ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฃผ์ด์ง๋ค.
N, M์ 50 ์ดํ์ ์์ฐ์์ด๊ณ , ์ง์ค์ ์๋ ์ฌ๋์ ์๋ 0 ์ด์ 50 ์ดํ์ ์ ์, ๊ฐ ํํฐ๋ง๋ค ์ค๋ ์ฌ๋์ ์๋ 1 ์ด์ 50 ์ดํ์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฌธ์ ์ ์ ๋ต์ ์ถ๋ ฅํ๋ค.
์ง์ค์ ์๊ณ ์๋ ์ฌ๋(A) ๊ณผ ๊ฐ์ ํํฐ์ ์ฐธ์ฌํ ์ฌ๋(B)์ ์ง์ค์ ์์์ผ ํ๋ค.
๋ ๊ทธ ์ฌ๋(B)๊ณผ ๊ฐ์ ํํฐ(C)์ ์ฐธ์ฌํ ์ฌ๋์ ์ง์ค์ ์์์ผ ํ๋ค.
์๋ก์ ์งํฉ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ฉด ์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ฅ ์ฝ๊ฒ ๋ํ๋ผ ์ ์๋ค.
๋ง๋ก ์ค๋ช ํ๋ฉด ์ดํด๊ฐ ์ ์๋ ์ ์๋๋ฐ
์๋์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ค๋ฉด
10 9
4 1 2 3 4
2 1 5
2 2 6
1 7
1 8
2 7 8
1 9
1 10
2 3 10
1 4
1, 2, 3, 4 ๋ฒ ์ฌ๋์ ์ง์ค์ ์๊ณ ์๋ค.
1, 2, 3, 4 ๋ฒ ์ฌ๋์ ์๋ก์ ์งํฉ์ผ๋ก ๋ํ๋ด๋ฉด
์ ๊ฐ๋ค.
1. ๋ค์์ผ๋ก ํํฐ์ ์ฐธ๊ฐํ๋ ์ฌ๋๋ค์ ์ฐ๊ฒฐํ์ฌ ์๋ก์ ์งํฉ์ผ๋ก ํํํด์ผ ํ๋ค.
1๋ฒ๊ณผ 5๋ฒ์ ๊ฐ์ ํํฐ์ ์ฐธ์
2๋ฒ๊ณผ 6๋ฒ์ ๊ฐ์ ํํฐ์ ์ฐธ์
์ฌ๊ธฐ์ ๊ฒฝ๋ก ์์ถ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ 6๋ฒ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ 1๋ฒ ๋ ธ๋๋ก ์ค์
์ ๊ณผ์ ์ ๋ชจ๋ ๋ ธ๋์ ๋ํด์ ๋ฐ๋ณตํ๋ฉด
์ ๊ฐ์ด ๋๋ค.
ํด๋น ๊ทธ๋ํ์ ๋ถ๋ชจ๋ ธ๋ ๋ฐฐ์ด ๊ฐ์ ์ถ๋ ฅ ํด๋ณด๋ฉด
[0, 1, 1, 1, 1, 1, 1, 7, 7, 9, 1]
์ ๊ฐ๋ค.
1๋ฒ ์งํฉ (์ง์ค์ ์๋ ์๋ก์ ์งํฉ)์ ์ํ๋ ์ฌ๋ : 1๋ฒ, 2๋ฒ, 3๋ฒ, 4๋ฒ, 5๋ฒ, 6๋ฒ, 10๋ฒ
1๋ฒ ์งํฉ์ ์ํ์ง ์๋ ์ฌ๋(์ง์ค์ ๋ชจ๋ฅด๋ ์ฌ๋) : 7๋ฒ, 8๋ฒ, 9๋ฒ
2. ์ง์ค์ ์๋ ์๋ก์ ์งํฉ (์ฌ๊ธฐ์ 1์ ์ํ๋)์ ์์๋ค์ ๋ธ๋๋ฆฌ์คํธ์ ๋ฃ์๋ค.
๋ธ๋๋ฆฌ์คํธ : [1, 2, 3, 4, 5, 6, 10]
3. ๋ชจ๋ ํํฐ๋ฅผ ์ํํ๋ฉฐ, ๋ธ๋๋ฆฌ์คํธ์ ํด๋นํ๋ ์ธ์์ด ์์ผ๋ฉด ans++ ์ํ ํ๋ค.
for(int i=1;i<M+1;i++){
int flag = 0;
for(int j : party[i]){
if(blackList.contains(j)){
flag = 1;
break;
}
}
if(flag==0){
ans+=1;
}
}
์ ์ฒด์ฝ๋
package com.mincheolsong;
import java.io.*;
import java.util.*;
public class Main {
// BOJ 1043
// ์๋ก์ ์งํฉ? union, findParent
static int N,M;
static int tpCnt; // ์ง์ค์ ์๋ ์ฌ๋ ์
static int[] tp; // ์ง์ค์ ์๋ ์ฌ๋
static List<Integer>[] party; // ํํฐ
static int[] parent; // ๋ฃจํธ๋
ธ๋๋ฅผ ๊ฐ์ง๋ ๋ฐฐ์ด
static List<Integer> blackList; // ์ง์ค์ ์๊ณ ์๋ ํ์๋ค
static void unionParent(int a, int b){
a = findParent(a);
b = findParent(b);
if(a < b){
parent[b]=a;
}else{
parent[a]=b;
}
}
static int findParent(int n){
if(parent[n]==n){
return n;
}
return parent[n] = findParent(parent[n]); // ๊ฒฝ๋ก์์ถ ๊ธฐ๋ฒ
}
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());
M = Integer.parseInt(st.nextToken());
party = new List[M+1];
parent = new int[N+1];
blackList = new ArrayList<>();
for(int i=1;i<N+1;i++){
parent[i] = i;
}
for(int i=1;i<M+1;i++){
party[i] = new ArrayList<>();
}
st = new StringTokenizer(br.readLine());
tpCnt = Integer.parseInt(st.nextToken()); // ์ง์ค์ ์๋์ฌ๋ ์
tp = new int[tpCnt]; // ์ง์ค์ ์๋ ์ฌ๋
for(int i=0;i<tpCnt;i++){
tp[i] = Integer.parseInt(st.nextToken());
}
// ์ง์ค์ ์๋ ์ฌ๋์ด ๋ ๋ช
์ด์์ธ ๊ฒฝ์ฐ unionParent
if(tpCnt>=2){
for(int i=1;i<tpCnt;i++){
unionParent(tp[0],tp[i]);
}
}
for(int i=1;i<M+1;i++){
st = new StringTokenizer(br.readLine());
int tmp = Integer.parseInt(st.nextToken());
for(int j=0;j<tmp;j++){
party[i].add(Integer.parseInt(st.nextToken()));
}
}
for(int i=1;i<M+1;i++){
if(party[i].size()>=2){ // ํํฐ์ ์ฐธ์ํ๋ ์ธ์์ด ๋ ๋ช
์ด์์ผ ๊ฒฝ์ฐ unionParent
for(int j=1;j<party[i].size();j++){
unionParent(party[i].get(0),party[i].get(j));
}
}
}
for(int i=1;i<N+1;i++){ // ๋ถ๋ชจ๋
ธ๋๋ฅผ ๋ฃจํธ๋
ธ๋๋ก ๋ํ๋ด๊ธฐ ์ํด findParent ํ ๋ฒ ์ํ
findParent(i);
}
int blackRoot = -1; // ์ง์ค์ ์๊ณ ์๋ ์๋ก์ ์งํฉ์ root๋
ธ๋
if(tpCnt>=1){
blackRoot = parent[tp[0]];
}
for(int i=1;i<N+1;i++){
if(parent[i]==blackRoot){
blackList.add(i); // ์ง์ค์ ์๊ณ ์๋ ์ฌ๋์ blackList์ ๋ฃ์ด์ค
}
}
int ans = 0;
for(int i=1;i<M+1;i++){
int flag = 0;
for(int j : party[i]){
if(blackList.contains(j)){ // ํ ๋ช
์ด๋ผ๋ ์ง์ค์ ์๊ณ ์์ผ๋ฉด break
flag = 1;
break;
}
}
if(flag==0){ // ๋ชจ๋ ์ง์ค์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ ans+=1;
ans+=1;
}
}
System.out.println(ans);
}
}
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ์ง์ ์ด ๋์์, ๋ฒฝ์ ๋ฟ๊ธฐ ์ ๊น์ง ์์ง์ด๋ bfs (๋ฐฑ์ค 13460 ๊ตฌ์ฌํ์ถ2) (1) | 2024.01.21 |
---|---|
๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2024.01.12 |
๋ค์ต์คํธ๋ผ (boj 12851 ์จ๋ฐ๊ผญ์ง2) (0) | 2024.01.02 |
์ด์ง ๊ฒ์ ํธ๋ฆฌ (๋ฐฑ์ค 5639๋ฒ) (0) | 2023.12.28 |
๋ค์ต์คํธ๋ผ (๋ฐฑ์ค 13549 ์จ๋ฐ๊ผญ์ง 3) (1) | 2023.12.26 |