[BOJ] 14267. ํšŒ์‚ฌ ๋ฌธํ™”1 (๐Ÿฅ‡, ํŠธ๋ฆฌ DP)

lemythe423ยท2023๋…„ 12์›” 11์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
83/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

๋ชจ๋“  ๋ถ€ํ•˜๋“ค์€ ํ•œ ๋ช…์˜ ์ง์† ์ƒ์‚ฌ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

2๋ฒˆ์ด 2์˜ ์ •๋„๋ฅผ ๊ฐ–๋Š” ์นญ์ฐฌ์„ ๋ฐ›๊ฒŒ ๋˜๋ฉด ๊ทธ ์•„๋ž˜์— ์žˆ๋Š” 3, 4, 5๊ฐ€ ๋ชจ๋‘ ์นญ์ฐฌ์˜ ์ˆ˜์น˜์— +2๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งค๋ฒˆ dfs๋ฅผ ๋Œ๋ ค์„œ ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ํƒ์ƒ‰ํ•ด์„œ ๋”ํ•ด์ฃผ๋ฉด ๋˜๊ฒ ์ง€๋งŒ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•ด๋ดค์„ ๋•Œ ๊ตณ์ด ๊ทธ๋Ÿด ํ•„์š”๋Š” ์—†๋‹ค.

์šฐ์„  ๊ฐ ์ง์›๋“ค์€ ํ•œ ๋ช…์˜ ์ƒ์‚ฌ๋งŒ์„ ๊ฐ–๊ฒŒ ๋˜๊ณ , ๊ฐ ์ƒ์‚ฌ๋“ค์€ ์ž์‹ ์ด ์–ป์€ ์นญ์ฐฌ์˜ ์ˆ˜์น˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. 1์€ ์ƒ์‚ฌ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฑด๋„ˆ๋›ฐ๊ณ  2๋Š” ์ž์‹ ์ด ์ง์ ‘ ์–ป์€ ์นญ์ฐฌ์˜ ์ˆ˜์น˜ 2์— 1๋กœ๋ถ€ํ„ฐ ๋ฐ›๊ฒŒ ๋˜๋Š” ์นญ์ฐฌ์˜ ์ˆ˜์น˜ 0์„ ๋”ํ•œ ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. 3์€ ์ž์‹ ์ด ์–ป์€ ์นญ์ฐฌ์˜ ์ˆ˜์น˜ 4์— ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ์‚ฌ๊ฐ€ ์–ป์€ ์นญ์ฐฌ์˜ ์ˆ˜์น˜๋ฅผ ์–ป๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ ์ƒ์‚ฌ๋Š” 2๋งŒ ๊ณ ๋ คํ•˜๋ฉด ๋œ๋‹ค. ๋ฌผ๋ก  1์˜ ์นญ์ฐฌ์˜ ์ˆ˜์น˜๊ฐ€ 3์—๊ฒŒ๋„ ๋‚ด๋ ค์˜ค๊ธฐ ๋•Œ๋ฌธ์— 3์€ 1์˜ ์นญ์ฐฌ์˜ ์ˆ˜์น˜๋„ ๊ฐ€์ ธ์™€์•ผ ํ•˜์ง€๋งŒ ๊ทธ ๋ถ€๋ถ„์€ ์ด๋ฏธ 2๊ฐ€ ์ž์‹ ์˜ ์ง์ ‘ ์ ์ธ ์ƒ์‚ฌ์ธ 1์˜ ์นญ์ฐฌ์˜ ์ˆ˜์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์œผ๋กœ๋ถ€ํ„ฐ ๊ณ„์‚ฐ์ด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 3์€ ์ž์‹ ์˜ ์ง์ ‘ ์ƒ์‚ฌ์ธ 2์˜ ์นญ์ฐฌ์˜ ์ˆ˜์น˜๋งŒ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค. ์˜คํžˆ๋ ค ์—ฌ๊ธฐ์„œ 1์˜ ์นญ์ฐฌ์˜ ์ˆ˜์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๊ฐ’์ด ์ค‘๋ณต๋œ๋‹ค.

๊ฒฐ๊ตญ ๋ชจ๋“  ์ง์›๋“ค์€ ์ž์‹ ์˜ ์ง์† ์ƒ์‚ฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นญ์ฐฌ์˜ ์ˆ˜์น˜ ๊ฐ’๋งŒ ๊ฐ€์ ธ์™€์„œ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด ๋ชจ๋“  ๊ณผ์ •์€ dfs ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  1์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด dp๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด์œ ๋Š” ์ง์† ์ƒ์‚ฌ์˜ ๋ฒˆํ˜ธ๋Š” ์ž์‹ ์˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ์ž‘์œผ๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ 1๋ฒˆ์ด ์‚ฌ์žฅ์ด๋‹ค ๋ผ๋Š” ์กฐ๊ฑด์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ƒ์‚ฌ๋“ค์ด ๋” ์ž‘์€ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์กฐํšŒํ•˜๋ฉด ํ•ญ์ƒ ์ƒ์‚ฌ์˜ ์นญ์ฐฌ ์ˆ˜์น˜ ๋“ค์ด ๋จผ์ € ๊ณ„์‚ฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

์ถœ๋ ฅ ๋ฐฉ์‹

0 2 6 6 12

ํ•ด๋‹น ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ฒ˜์Œ์—” ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜๊ณ  ๋’ค์— " "๋ฅผ ๋ถ™์˜€์—ˆ๋‹ค.

StringBuilder ์ƒ์„ฑํ•ด์„œ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค๊ณ  ์ถœ๋ ฅํ•˜๋‹ˆ๊นŒ ์‹œ๊ฐ„์ด ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์—ˆ๋‹ค.

StringBuilder sb = new StringBuilder();

for (int i = 1; i < n+1; i++) {
   sb.append(degree[i]).append(" ");
}
System.out.println(sb);

์ตœ์ข… ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        
        int n = Integer.parseInt(st.nextToken());
        int m  = Integer.parseInt(st.nextToken());
        int[] parent = new int[n+1]; // ๋ถ€๋ชจ ๋…ธ๋“œ
        int[] degree = new int[n+1]; // ์นญ์ฐฌ์˜ ์ •๋„
        
        st = new StringTokenizer(br.readLine());
        for (int i = 1; i < n+1; i++) {
            parent[i] = Integer.parseInt(st.nextToken());    
        }

        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int p = Integer.parseInt(st.nextToken());
            int w = Integer.parseInt(st.nextToken());
            degree[p] += w;
        }
        
        int par;
        for (int i = 2; i < n+1; i++) {
            par = parent[i];
            degree[i] += degree[par];
        }

        StringBuilder sb = new StringBuilder();

        for (int i = 1; i < n+1; i++) {
            sb.append(degree[i]).append(" ");
        }
        System.out.println(sb);
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€