๊ธฐ๋ก๋ฐฉ

BOJ_1033 : ์นตํ…Œ์ผ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1033 : ์นตํ…Œ์ผ

Soom_1n 2024. 2. 29. 14:36

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1033๋ฒˆ: ์นตํ…Œ์ผ

august14๋Š” ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๋ง›์žˆ๋Š” ์นตํ…Œ์ผ์ด๋‹ค. ์ด ์นตํ…Œ์ผ์„ ๋งŒ๋“œ๋Š” ์ •ํ™•ํ•œ ๋ฐฉ๋ฒ•์€ ์•„์ง ์„ธ์ƒ์— ๊ณต๊ฐœ๋˜์ง€ ์•Š์•˜์ง€๋งŒ, ๋“ค์–ด๊ฐ€๋Š” ์žฌ๋ฃŒ N๊ฐœ๋Š” ๊ณต๊ฐœ๋˜์–ด ์žˆ๋‹ค.  ๊ฒฝ๊ทผ์ด๋Š” ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์„ ํ†ตํ•ด์„œ ์žฌ๋ฃŒ ์Œ N

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • 10 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง€๊ณ , N-1 ๊ฐœ์˜ ์žฌ๋ฃŒ ๋น„์œจ์ด ์ฃผ์–ด์ง„๋‹ค.
  • ์นตํ…Œ์ผ์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ๊ฐ ์žฌ๋ฃŒ์˜ ์ตœ์†Œ ์งˆ๋Ÿ‰์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ๊ธฐ์ค€๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ๋œ p, q ๋น„์œจ๋“ค์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
  • N๊ฐœ์˜ ์žฌ๋ฃŒ์™€ N-1์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋Š” N๊ฐœ์˜ ๋…ธ๋“œ์™€ N-1์˜ ๊ฐ„์„  ์ •๋ณด์ด๋ฏ€๋กœ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ํ•œ ๋…ธ๋“œ์— ๊ฐ’์„ ๋„ฃ๊ณ  DFS๋กœ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ž…๋ ฅ๋œ ๋น„์œจ๋กœ ๊ฐ ๋…ธ๋“œ์˜ ์งˆ๋Ÿ‰ ๊ฐ’์„ ๋งŒ๋“ค์–ด ๊ฐ„๋‹ค.
  • ๋ชจ๋“  ๋…ธ๋“œ์˜ ๊ฐ’์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ๊ตฌํ•œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋…ธ๋“œ์˜ ๊ฐ’์„ ๋‚˜๋ˆˆ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • ๋ชจ๋“  ์žฌ๋ฃŒ์˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋ฉด์„œ ์ •์ˆ˜๊ฐ€ ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋ˆˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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

public class Main {
    private static boolean[] visited;
    private static ArrayList<Node>[] adjlist;
    private static int N;
    private static long[] D;

    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        N = Integer.parseInt(br.readLine());
        visited = new boolean[N];
        adjlist = new ArrayList[N];
        D = new long[N];

        for (int i = 0; i < N; i++) {
            adjlist[i] = new ArrayList<>();
        }

        long lcm = 1;

        for (int i = 0; i < N - 1; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            int p = Integer.parseInt(st.nextToken());
            int q = Integer.parseInt(st.nextToken());
            adjlist[a].add(new Node(b, p, q));
            adjlist[b].add(new Node(a, q, p));
            lcm *= (long) p * q / gcd(p, q);
        }

        // DFS
        D[0] = lcm;
        dfs(0);
        long gcd = D[0];
        for (int i = 1; i < N; i++) {
            gcd = gcd(gcd, D[i]);
        }

        // Output
        StringBuilder sb = new StringBuilder();
        for (long i : D) {
            sb.append(i / gcd).append(' ');
        }
        bw.write(sb.toString());
        bw.flush();
    }

    private static void dfs(int now) {
        visited[now] = true;

        for (Node node : adjlist[now]) {
            if (!visited[node.num]) {
                D[node.num] = D[now] * node.numerator / node.denominator;
                dfs(node.num);
            }
        }
    }

    private static long gcd(long a, long b) {
        if (b == 0) return a;
        return gcd(b, a % b);
    }

    private static class Node {
        int num;
        int denominator;
        int numerator;

        public Node(int num, int denominator, int numerator) {
            this.num = num;
            this.denominator = denominator;
            this.numerator = numerator;
        }
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • N-1๊ฐœ์˜ ์žฌ๋ฃŒ ๋น„๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ์ €์žฅํ•œ๋‹ค.
    • ์ด๋•Œ ๋น„์œจ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ๊ณฑ์…ˆ ๋ˆ„์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ longํ˜•์œผ๋กœ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ณ„์‚ฐ๋œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์žฌ๋ฃŒ(๋…ธ๋“œ) ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.
    • ํƒ์ƒ‰ํ•˜๋ฉฐ ์ž…๋ ฅ๋œ ๋น„์œจ์— ๋”ฐ๋ผ์„œ ์žฌ๋ฃŒ ๋ณ„ ์งˆ๋Ÿ‰ ๊ฐ’์„ D๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
  • ํƒ์ƒ‰ ํ›„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์žฌ๋ฃŒ๋“ค์˜ ์งˆ๋Ÿ‰ ๊ฐ’์œผ๋กœ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆˆ ์žฌ๋ฃŒ ์งˆ๋Ÿ‰๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • N์ด ์ตœ๋Œ€ 10, p์™€ q๊ฐ€ ์ตœ๋Œ€ 9์—ฌ์„œ intํ˜• ๋ฒ”์œ„๋กœ ๊ดœ์ฐฎ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๋น„์œจ์ด ์ค‘์ฒฉ๋˜๋ฉด int ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    • int๋กœ ๋‚ด์„œ 1ํšŒ ํ‹€๋ฆฌ๊ณ , long์œผ๋กœ ๋ณ€๊ฒฝํ•ด ๋งž์•˜๋‹ค.
  • ์ •๋‹ต ํ•ด์„ค์„ ๋ณด๋ฉด์„œ ํ’€์ดํ–ˆ๋Š”๋ฐ, ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜/์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํƒ์ƒ‰๊นŒ์ง€ ๋“ค์–ด๊ฐ„ ๋ณตํ•ฉ์ ์ธ ๋ฌธ์ œ์˜€๋‹ค.
    • ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ์–ด๋ ค์› ๋˜ ๊ฑด, ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

728x90