๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€

๋ฐฑ์ค€ 1043๋ฒˆ: ๊ฑฐ์ง“๋ง(java)

2025. 5. 7. 19:20ยท์•Œ๊ณ ๋ฆฌ์ฆ˜

 

๐Ÿ’ก ๋ฌธ์ œ ์š”์•ฝ

  • ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ผ๋ถ€ ์žˆ๊ณ , M๊ฐœ์˜ ํŒŒํ‹ฐ๊ฐ€ ์—ด๋ฆผ
  • ํŒŒํ‹ฐ์— ์ฐธ์—ฌํ•œ ์‚ฌ๋žŒ ์ค‘ ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ํŒŒํ‹ฐ์—์„œ ๊ฑฐ์ง“๋ง์„ ํ•  ์ˆ˜ ์—†์Œ
  • ํ•œ ๋ฒˆ ์ง„์‹ค์„ ์•Œ๊ฒŒ ๋˜๋ฉด ์—ฐ๊ฒฐ๋œ ํŒŒํ‹ฐ, ์‚ฌ๋žŒ์„ ํ†ตํ•ด ์ „ํŒŒ๋จ (BFS ํ™œ์šฉ)
  • ๊ฑฐ์ง“๋ง์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒํ‹ฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ“… ์กฐ๊ฑด ์š”์•ฝ

  • ์‚ฌ๋žŒ ์ˆ˜ N (1 ≤ N ≤ 50)
  • ํŒŒํ‹ฐ ์ˆ˜ M (1 ≤ M ≤ 50)
  • ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ ์ˆ˜ K (0 ≤ K ≤ N)
  • ๊ฐ ํŒŒํ‹ฐ์— ์ฐธ์„ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ๋ชฉ๋ก ์ฃผ์–ด์ง

๐Ÿ” ์ž…๋ ฅ ํ˜•์‹

N M
K ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ ๋ฒˆํ˜ธ๋“ค...
ํŒŒํ‹ฐ1 ์ฐธ์„ ์ธ์› ์ˆ˜ ๋ฒˆํ˜ธ ๋ฒˆํ˜ธ ...
ํŒŒํ‹ฐ2 ์ฐธ์„ ์ธ์› ์ˆ˜ ๋ฒˆํ˜ธ ๋ฒˆํ˜ธ ...
...

โœ… ์ถœ๋ ฅ ํ˜•์‹

  • ๊ฑฐ์ง“๋ง์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒํ‹ฐ์˜ ์ˆ˜ ์ถœ๋ ฅ

๐Ÿง  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

  1. ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ๋“ค์„ ํ์— ์ €์žฅ (BFS ์‹œ์ž‘์ )
  2. ๊ฐ ์‚ฌ๋žŒ์ด ์–ด๋–ค ํŒŒํ‹ฐ์— ์ฐธ์„ํ–ˆ๋Š”์ง€ ๊ธฐ๋ก
  3. BFS๋กœ ์ง„์‹ค ์ „ํŒŒ:
    • ์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ์ด ์ฐธ์„ํ•œ ํŒŒํ‹ฐ๋ผ๋ฉด ํ•ด๋‹น ํŒŒํ‹ฐ์˜ ๋‹ค๋ฅธ ์ฐธ์„์ž๋„ ์ง„์‹ค์„ ์•Œ๊ฒŒ ๋จ
    • ์ „ํŒŒ๋œ ์‚ฌ๋žŒ๋“ค๋„ ๋‹ค์‹œ ํ์— ๋„ฃ์–ด ํƒ์ƒ‰ ๋ฐ˜๋ณต
  4. BFS ์ข…๋ฃŒ ํ›„, ์ง„์‹ค์ด ์ „ํŒŒ๋˜์ง€ ์•Š์€ ํŒŒํ‹ฐ ์ˆ˜ ์„ธ๊ธฐ

๐Ÿ”‘ ํ•ต์‹ฌ ๊ตฌํ˜„ ์ฝ”๋“œ

Queue<Integer> queue = new ArrayDeque<>();
for (์ง„์‹ค์„ ์•„๋Š” ์‚ฌ๋žŒ p)
    trueList[p] = 1; queue.offer(p);

while (!queue.isEmpty()) {
    int person = queue.poll();
    for (int partyIdx : peopleAttendedParty.get(person)) {
        if (partyVisited[partyIdx]) continue;
        partyVisited[partyIdx] = true;
        for (int p : parties.get(partyIdx)) {
            if (trueList[p] == 0) {
                trueList[p] = 1;
                queue.offer(p);
            }
        }
    }
}

๐Ÿ—‚ ์ „์ฒด ์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class Main {

    public static Integer convertInt(String word) {
        return Integer.parseInt(word);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = convertInt(st.nextToken());
        int M = convertInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        int trueNum = convertInt(st.nextToken());
        int[] trueList = new int[N + 1];
        Queue<Integer> queue = new ArrayDeque<>();
        for (int i = 0; i < trueNum; i++) {
            int p = convertInt(st.nextToken());
            trueList[p] = 1;
            queue.offer(p);
        }

        List<List<Integer>> parties = new ArrayList<>();
        List<List<Integer>> peopleAttendedParty = new ArrayList<>();
        for (int i = 0; i <= N; i++) {
            peopleAttendedParty.add(new ArrayList<>());
        }
        for (int i = 0; i < M; i++) {
            parties.add(new ArrayList<>());
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int partyNum = convertInt(st.nextToken());
            for (int j = 0; j < partyNum; j++) {
                int p = convertInt(st.nextToken());
                parties.get(i).add(p);
                peopleAttendedParty.get(p).add(i);
            }
        }

        boolean[] partyVisited = new boolean[M];
        while (!queue.isEmpty()) {
            int person = queue.poll();
            for (int partyIdx : peopleAttendedParty.get(person)) {
                if (partyVisited[partyIdx]) continue;
                partyVisited[partyIdx] = true;
                for (int p : parties.get(partyIdx)) {
                    if (trueList[p] == 0) {
                        trueList[p] = 1;
                        queue.offer(p);
                    }
                }
            }
        }

        int count = 0;
        for (int i = 0; i < M; i++) {
            if (!partyVisited[i]) {
                count++;
            }
        }

        System.out.println(count);
    }
}

โฑ๏ธ ์‹œ๊ฐ„ ๋ณต์žก๋„

๋‹จ๊ณ„ ์‹œ๊ฐ„

์ž…๋ ฅ ์ฒ˜๋ฆฌ O(N + M)
BFS ํƒ์ƒ‰ O(N + M)
์ถœ๋ ฅ ๊ณ„์‚ฐ O(M)

โฎ•๏ธ ์ „์ฒด์ ์œผ๋กœ O(N + M) ์ˆ˜์ค€์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

 

'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€ 1976: ์—ฌํ–‰ ๊ณ„ํš(Java)  (0) 2025.05.24
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค PCCP๋ชจ์˜๊ณ ์‚ฌ#1 4๋ฒˆ๋ฌธ์ œ  (0) 2025.05.14
๋ฐฑ์ค€ 2075: N๋ฒˆ์งธ ํฐ ์ˆ˜(JAVA)  (0) 2025.05.06
๋ฐฑ์ค€ 13114: List of Unique Numbers(ํŒŒ์ด์ฌ)  (0) 2025.04.28
22251๋ฒˆ: ๋นŒ๋Ÿฐ ํ˜ธ์„(ํŒŒ์ด์ฌ)  (0) 2025.04.26
'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€ 1976: ์—ฌํ–‰ ๊ณ„ํš(Java)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค PCCP๋ชจ์˜๊ณ ์‚ฌ#1 4๋ฒˆ๋ฌธ์ œ
  • ๋ฐฑ์ค€ 2075: N๋ฒˆ์งธ ํฐ ์ˆ˜(JAVA)
  • ๋ฐฑ์ค€ 13114: List of Unique Numbers(ํŒŒ์ด์ฌ)
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • ๊ฐœ๋ฐœ์ž (77)
      • n8n (2)
      • CS๊ณต๋ถ€ (46)
        • Java & Spring (15)
        • ์ธํ”„๋ผ (7)
        • ์šด์˜์ฒด์ œ & ์‹œ์Šคํ…œ (9)
        • ๊ธฐํƒ€ CS์ง€์‹ (7)
        • ๋„คํŠธ์›Œํฌ (6)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (16)
      • ํ”„๋กœ์ ํŠธ (8)
        • ๊ฐ์ •&๊ธˆ์œต์ฑ—๋ด‡ (8)
      • ๋ฆฌํŒฉํ† ๋ง (5)
        • horong (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”