์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/๋ฐ”ํ‚น๋…

[JAVA] ๋ฐฑ์ค€ 2637๋ฒˆ ใ€G2.์žฅ๋‚œ๊ฐ ์กฐ๋ฆฝใ€‘

2023. 10. 7. 09:07

๋ฌธ์ œ

 

2637๋ฒˆ: ์žฅ๋‚œ๊ฐ ์กฐ๋ฆฝ

์ฒซ์งธ ์ค„์—๋Š” ์ž์—ฐ์ˆ˜ N(3 ≤ N ≤ 100)์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, 1๋ถ€ํ„ฐ N-1๊นŒ์ง€๋Š” ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์ด๋‚˜ ์ค‘๊ฐ„ ๋ถ€ํ’ˆ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , N์€ ์™„์ œํ’ˆ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋‹ค์Œ ์ค„์—๋Š” ์ž์—ฐ์ˆ˜ M(3 ≤ M ≤ 100)์ด ์ฃผ

www.acmicpc.net

 

ํ’€์ด

1๏ธโƒฃ ์œ„์ƒ์ •๋ ฌ์„ ์ด์šฉํ•œ ํ’€์ด

๐Ÿ’ก ๋– ์˜ค๋ฅธ Idea

์ผ๋‹จ ๋ถ€ํ’ˆ์˜ ์กฐ๋ฆฝ ์ˆœ์„œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์œ„์ƒ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํŒŒ์•…ํ–ˆ๋‹ค.

๊ทผ๋ฐ, ์›ํ•˜๋Š” ์ถœ๋ ฅ์€ ์ตœ์ข… ์žฅ๋‚œ๊ฐ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ–ˆ๋‹ค.

๊ธฐ๋ณธ ๋ถ€ํ’ˆ์€ ์กฐํ•ฉ๋˜์–ด ๋งŒ๋“ค์–ด์ง„ ๋ถ€ํ’ˆ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, ํŠน์ • ๋ถ€ํ’ˆ์„ ์กฐ๋ฆฝํ• ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์กฐ๋ฆฝ ๋ถ€ํ’ˆ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณ„์† ๋„˜๊ฒจ์ฃผ์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์ผ๋‹จ, indegree ๊ฐ’์ด 0 ์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์€ ์ž๊ธฐ ์ž์‹  1๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

์˜ˆ์ œ๋ฅผ ์˜ˆ๋ฅผ ๋“ค๋ฉด,


1๋ฒˆ ๋ถ€ํ’ˆ์€

[๊ธฐ๋ณธ ๋ถ€ํ’ˆ 1: 1๊ฐœ ] ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.



5๋ฒˆ ๋ถ€ํ’ˆ์€ 1๋ฒˆ ๋ถ€ํ’ˆ 2๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ

1๋ฒˆ ๋ถ€ํ’ˆ์ด ๊ฐ€์ง„ ๋ชจ๋“  ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ 2๋ฐฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋”ฐ๋ผ์„œ, 5๋ฒˆ ๋ถ€ํ’ˆ์˜ ๊ฒฝ์šฐ

[๊ธฐ๋ณธ ๋ถ€ํ’ˆ 1 : 2๊ฐœ] ๊ฐ€ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  2๋ฒˆ ๋ถ€ํ’ˆ 2๊ฐœ๋„ ํ•„์š”ํ•˜๋ฏ€๋กœ

5๋ฒˆ ๋ถ€ํ’ˆ์˜ ๊ฒฝ์šฐ

[๊ธฐ๋ณธ ๋ถ€ํ’ˆ 1 : 2๊ฐœ , ๊ธฐ๋ณธ ๋ถ€ํ’ˆ 2 : 2๊ฐœ] ๊ฐ€ ๋œ๋‹ค. 

๋”์ด์ƒ 5๋ฒˆ ๋ถ€ํ’ˆ์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ถ€ํ’ˆ์ด ๋” ์—†์œผ๋ฏ€๋กœ ๋งˆ๋ฌด๋ฆฌ ๋œ๋‹ค.



์ด์ œ 7๋ฒˆ ๋ถ€ํ’ˆ์˜ ๊ฒฝ์šฐ 5๋ฒˆ ๋ถ€ํ’ˆ 2๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ

5๋ฒˆ ๋ถ€ํ’ˆ์ด ๊ฐ€์ง„ ๋ชจ๋“  ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ 2๋ฐฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋”ฐ๋ผ์„œ,

7๋ฒˆ ๋ถ€ํ’ˆ์˜ ๊ฒฝ์šฐ

[๊ธฐ๋ณธ ๋ถ€ํ’ˆ 1 : 4๊ฐœ, ๊ธฐ๋ณธ ๋ถ€ํ’ˆ 2 : 4๊ฐœ] ๊ฐ€ ๋œ๋‹ค.

...

์ด๋Ÿฐ ์‹์œผ๋กœ ์œ„์ƒ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ

์ด์ „ ๋ถ€ํ’ˆ์ด ๊ฐ€์ง„ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ ์ˆ˜์™€ ํ•„์š”ํ•œ ์ด์ „ ๋ถ€ํ’ˆ์˜ ์ˆ˜๋ฅผ ๊ณฑํ•˜์—ฌ ๋‹ค์Œ ๋ถ€ํ’ˆ์— ๊ธฐ๋ณธ ๋ถ€ํ’ˆ ๊ฐœ์ˆ˜ ์ •๋ณด๋ฅผ ๋„˜๊ธฐ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด

์ตœ์ข… ๋ถ€ํ’ˆ์˜ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int M = Integer.parseInt(br.readLine());
        int[] indegree = new int[N + 1];

        Part[] parts = new Part[N + 1];
        for (int i = 0; i <= N; i++) {
            parts[i] = new Part(i);
        }

        for (int i = 0; i < M; i++) {
            String[] input = br.readLine().split(" ");
            int next = Integer.parseInt(input[0]);
            int pre = Integer.parseInt(input[1]);
            int numOfPre = Integer.parseInt(input[2]);
            indegree[next]++;
            parts[pre].nextParts.put(next, numOfPre);
        }

        Queue<Integer> q = new LinkedList<>();
        for (int i = 1; i <= N; i++) {
            if (indegree[i] == 0) {
                q.offer(i);
                // ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์„ ์ด๋ฃจ๋Š” ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์€ ์ž๊ธฐ ์ž์‹  1๊ฐœ
                parts[i].defaultParts.put(i, 1);
            }
        }

        // ์œ„์ƒ์ •๋ ฌ
        while (!q.isEmpty()) {
            int idx = q.poll();
            Part part = parts[idx];

            for (int nextIdx : part.nextParts.keySet()) {
                Part next = parts[nextIdx];
                int numOfPrePart = part.nextParts.get(nextIdx);

                // ์ด์ „ ๋ถ€ํ’ˆ์˜ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ๋“ค์„ ๋‹ค์Œ ๋ถ€ํ’ˆ์— ๊ธฐ๋ก
                for (int idxOfDefaultPart : part.defaultParts.keySet()) {
                    int numOfDefaultPart = part.defaultParts.get(idxOfDefaultPart);
                    next.defaultParts.put(idxOfDefaultPart, next.defaultParts.getOrDefault(idxOfDefaultPart, 0) + numOfPrePart * numOfDefaultPart);
                }

                // ๋งŒ์•ฝ ์ด์ „ ๋ถ€ํ’ˆ์ด ๋‹ค ์ฒดํฌ๋˜์—ˆ๋‹ค๋ฉด ํ์— ์ถ”๊ฐ€
                indegree[nextIdx]--;
                if (indegree[nextIdx] == 0) {
                    q.offer(nextIdx);
                }

            }
        }

        Part toy = parts[N];

        List<int[]> ans = new ArrayList<>();
        for (Integer defaultPart : toy.defaultParts.keySet()) {
            ans.add(new int[]{defaultPart, toy.defaultParts.get(defaultPart)});
        }

        Collections.sort(ans, (a, b) -> a[0] - b[0]);

        StringBuilder sb = new StringBuilder();
        for (int[] info : ans) {
            sb.append(info[0] + " " + info[1] + "\n");
        }
        System.out.println(sb);

    }

    static class Part {
        int idx;
        Map<Integer, Integer> nextParts = new HashMap<>();

        Map<Integer, Integer> defaultParts = new HashMap<>();

        public Part(int idx) {
            this.idx = idx;
        }

    }
}

 

๊ฒฐ๊ณผ

 

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/๋ฐ”ํ‚น๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JAVA] ๋ฐฑ์ค€ 1507๋ฒˆ ใ€G2.๊ถ๊ธˆํ•œ ๋ฏผํ˜ธใ€‘
    • [JAVA] ๋ฐฑ์ค€ 13168๋ฒˆ ใ€G3.๋‚ด์ผ๋กœ ์—ฌํ–‰ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 21276๋ฒˆ ใ€G2.๊ณ„๋ณด ๋ณต์›๊ฐ€ ํ˜ธ์„ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 1967๋ฒˆ ใ€G4.ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ใ€‘
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

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