๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ProgramSolve/Baekjoon

[BOJ] 1068๋ฒˆ - ํŠธ๋ฆฌ (Java)

by SooooooooS 2024. 2. 1.
728x90

๐Ÿ› ๏ธ ๋ฌธ์ œ ๐Ÿ› ๏ธ


๐Ÿ—’๏ธ ์„ค๋ช… ๐Ÿ—’๏ธ

ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋Š” ๋ถ€๋ชจ์™€ ์ž์‹์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„๋‹ค.

์ด ๋ฌธ์ œ์—์„œ ์ž…๋ ฅ์œผ๋กœ ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ ๋…ธ๋“œ์— ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

for(int i = 0; i < n; i++) {
    int p = Integer.parseInt(st.nextToken());
    if(p == -1) { //๋ฃจํŠธ๋…ธ๋“œ ์ €์žฅํ•˜๊ธฐ
        root = i;
    }
    else {
        tree[p].add(i); //๋ถ€๋ชจ๋…ธ๋“œ์—๊ฒŒ ์ž์‹๋…ธ๋“œ ์ถ”๊ฐ€
    }
}

 

์ด์™€ ๊ฐ™์ด ์ €์žฅํ•œ ํ›„ ์ „์ฒด์ ์œผ๋กœ DFS๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฆฌํ”„๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•ด์„œ ์ด๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

1. ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋ฆฌํ”„๋…ธ๋“œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ

  • ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ ๊ทธ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œ
  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ 1์ด ๋  ๊ฒƒ์ด๋‹ค.

2. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๊ฒฝ์šฐ

  • ์• ์ดˆ์— ํƒ์ƒ‰์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ์˜ˆ์ œ๊ฐ€ ๋งž๋Š”๋ฐ ์™œ ํ‹€๋ฆฌ๋Š”์ง€ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋ฐฑ์ค€ ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์—์„œ ๋ฐ˜๋ก€๋ฅผ ์•„์ฃผ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•œ ๊ธ€์„ ๋ณด์•˜๋‹ค.

(https://www.acmicpc.net/board/view/132447)

 

์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๊ฐ€์žฅ ๋์˜ ๊ฒฝ์šฐ

๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ!

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ์ž˜ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ž˜์„œ ์•ž์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๊ฒฝ์šฐ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์—ฌ์•ผ๊ฒ ๋‹ค.


๐Ÿ€ ํ’€์ด ๐Ÿ€

package Baekjoon;

import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class DFS1068 {
    static ArrayList<Integer>[] tree;
    static int count;
    static int remove;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());
        tree = new ArrayList[n];
        count = 0;
        for(int i = 0; i < n; i++) {
            tree[i] = new ArrayList<>();
        }

        StringTokenizer st = new StringTokenizer(br.readLine());
        int root = 0;
        for(int i = 0; i < n; i++) {
            int p = Integer.parseInt(st.nextToken());
            if(p == -1) {
                root = i;
            }
            else {
                tree[p].add(i);
            }
        }

        remove = Integer.parseInt(br.readLine());
        if(root != remove) { //๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ์ง€์šฐ์ง€ ์•Š์œผ๋ฉด ํƒ์ƒ‰ ๊ฐ€๋Šฅ
            dfs(root);
        }
        bw.write(count + "");
        bw.flush();
        bw.close();
    }

    static void dfs(int n) {
        boolean flag = false;
        for(int i = 0; i < tree[n].size(); i++) {
            int c = tree[n].get(i);
            if(c != remove) { //์ง€์›Œ์•ผํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ
                dfs(c);
                flag = true;
            }
        }
        if(!flag){
            count++;
        }
    }
}
728x90

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

[BOJ] 13023๋ฒˆ - ABCDE (Java)  (0) 2024.03.01
[BOJ] 2477๋ฒˆ - ์ฐธ์™ธ๋ฐญ (Java)  (4) 2024.02.19
[BOJ] 5397๋ฒˆ - ํ‚ค๋กœ๊ฑฐ (Java)  (2) 2024.01.28
[BOJ] 2512๋ฒˆ - ์˜ˆ์‚ฐ (Java)  (0) 2024.01.15
[BOJ] 13904๋ฒˆ - ๊ณผ์ œ (Java)  (2) 2024.01.05