Zayson
A to Zayson!
Zayson
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (132)
    • Computer Science (20)
      • Network (4)
      • DB (12)
      • OS (4)
    • Algorithm (32)
      • ์™„์ „ํƒ์ƒ‰(Brute-Force) (3)
      • ๊ทธ๋ฆฌ๋””(Greedy) (6)
      • ํˆฌํฌ์ธํ„ฐ(Two-Pointer) (1)
      • ๊ทธ๋ž˜ํ”„(Graph) (5)
      • BFS & DFS (9)
      • ๊ตฌํ˜„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜(Implementation) (5)
      • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP) (3)
    • Backend (51)
      • Spring Boot (19)
      • JPA (16)
      • Kafka (2)
      • Java (13)
      • Kotlin (1)
    • DevOps (1)
      • Jenkins (5)
      • Oracle Cloud Infrastructure (1)
      • Kubernetes & Docker (1)
    • Trouble Shooting (3)
      • JPA (1)
      • Spring Boot (2)
    • ํšŒ๊ณ  (5)
      • ์—”๋นต ํ”„๋กœ์ ํŠธ ํฌ์ŠคํŠธ ๋กœ๋“œ๋งต (1)
      • 2022๋…„ (4)
    • Kafka (7)
      • Kafka (5)
      • Kafka Connect (2)
    • ๊ธฐ์ˆ  ์„œ์  (6)
      • ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ (3)
      • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ •๋ณตํ•ด์•ผํ•  ๊ฐ์ฒด ์ง€ํ–ฅ๊ณผ ๋””์ž์ธ ํŒจํ„ด (2)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)

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

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • spring boot
  • Backend
  • kafka
  • SpringBoot
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „ ์ž…๋ฌธ
  • CS
  • ์™„์ „ํƒ์ƒ‰
  • dfs
  • ๋ฐฑ์ค€
  • ๋‚˜ ํ˜ผ์ž ์Šคํ”„๋ง๋ถ€ํŠธ!
  • Computer science
  • ์—”๋นตํ”„๋กœ์ ํŠธ
  • ๋ผ์ด๋ธŒ์Šคํ„ฐ๋””
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • Kafka Connect
  • JPA
  • BFS
  • Java
  • ๊ทธ๋ฆฌ๋””
  • ๊ตฌํ˜„

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Zayson

A to Zayson!

[๋ฐฑ์ค€, Java] 1414๋ฒˆ : ๋ถˆ์šฐ์ด์›ƒ๋•๊ธฐ
Algorithm/๊ทธ๋ž˜ํ”„(Graph)

[๋ฐฑ์ค€, Java] 1414๋ฒˆ : ๋ถˆ์šฐ์ด์›ƒ๋•๊ธฐ

2022. 6. 8. 09:57

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/1414

๐Ÿ˜ฎ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋ฌธ์ œ์˜ ์ž…๋ ฅ์ด ์ธ์ ‘ํ–‰๋ ฌ ๋ฐฉ์‹์œผ๋กœ ๋“ค์–ด์˜ค๊ณ , ์•ŒํŒŒ๋ฒณ๊ณผ 0์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค.

๋”ฐ๋ผ์„œ, ์ž…๋ ฅ์ด ์ด์–ด์ง„ ๋žœ์„ ์˜ ๊ธธ์ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๋ชจ๋“  ์ปดํ“จํ„ฐ์— ๋Œ€ํ•ด ๋žœ์„  ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์–ด ์คฌ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ€์žฅ ์งง์€ ๋žœ์„ ์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ, ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋ฆผ ํ˜น์€ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์•ŒํŒŒ๋ฒณ์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ™˜๋‹ค.
  2. ์ปดํ“จํ„ฐ์— ๋Œ€ํ•ด ๋žœ์„  ์ •๋ณด๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค(์ •์ ๊ณผ ๊ฐ„์„ ์„ ์ด์šฉํ•ด ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ)
  3. ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์–ด๋–ค ์ปดํ“จํ„ฐ์—์„œ ์‹œ์ž‘ํ•˜๋”๋ผ๋„ ๋ชจ๋‘ ์ด์–ด์ ธ์•ผํ•˜๋ฏ€๋กœ ์ƒ๊ด€์ด ์—†๋‹ค.
  4. ์ตœ์†Œ ๊ธธ์ด ๋žœ์„ ์„ ๊ตฌํ•˜๊ณ  ์ „์ฒด ๋žœ์„  ๊ธธ์ด์—์„œ ๋นผ์ค€๋‹ค.

๐Ÿšฉ Java ์ฝ”๋“œ

package com.algorithm.Baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main_1414_๋ถˆ์šฐ์ด์›ƒ๋•๊ธฐ {
    private static List<List<Computer>> computers;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        computers = new ArrayList<>();

        for(int computer = 0; computer <= N; computer++) {
            computers.add(new ArrayList<>());
        }

        // ๊ฐ„์„  ์ •๋ณด ๋„ฃ๊ธฐ
        int totalLength = 0;
        for(int computerA = 1; computerA <= N; computerA++) {
            String lengthInfo = br.readLine();
            for(int computerB = 1; computerB <= N; computerB++) {
                int length = convertAlpha(lengthInfo.charAt(computerB - 1));

                computers.get(computerA).add(new Computer(computerB, length));
                computers.get(computerB).add(new Computer(computerA, length));

                totalLength += length;
            }
        }

        // ๋žœ์„  ๊ตฌํ•˜๊ธฐ
        int rst = getMaxLanLength(N, totalLength);
        System.out.println(rst);

        br.close();
    }

    private static int convertAlpha(char alphabet) {
        if(Character.isLowerCase(alphabet)) return alphabet - 'a' + 1;
        else if(Character.isUpperCase(alphabet)) return alphabet - 'A' + 27;
        return 0;
    }

    private static int getMaxLanLength(int n, int totalLength) {
        /**
         * 1. ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ 1๋ฒˆ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•ด์„œ ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ ๊ตฌํ•˜๊ธฐ
         * 2. ๋ชจ๋‘ ๋ฐฉ๋ฌธ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ -1
         * 3. ๋ชจ๋‘ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ๋œ ๊ฒฝ์šฐ totalLength - ๊ธธ์ด๊ฐ’
         */
        int[] lan = new int[n + 1];
        boolean[] visited = new boolean[n + 1];
        PriorityQueue<Computer> pq = new PriorityQueue<>();

        Arrays.fill(lan, Integer.MAX_VALUE);
        pq.add(new Computer(1, 0));
        lan[1] = 0;

        // ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜
        while(!pq.isEmpty()) {
            Computer computerA = pq.poll();

            if(visited[computerA.getComputer()]) continue;
            visited[computerA.getComputer()] = true;

            for (Computer computerB : computers.get(computerA.getComputer())) {
                if(!visited[computerB.getComputer()] && computerB.getLength() != 0) {
                    // ์ตœ์†Œ ๊ธธ์ด ๊ฐฑ์‹ 
                    lan[computerB.getComputer()] = Math.min(lan[computerB.getComputer()], computerB.getLength());
                    pq.add(computerB);
                }
            }

        }

        // ์‚ฌ์šฉํ•œ ๋žœ์„  ๊ธธ์ด ๊ตฌํ•˜๊ธฐ
        int lanLength = 0;
        for(int computer = 1; computer <= n; computer++) {
            // ์—ฐ๊ฒฐ ์•ˆ๋œ ์ปดํ“จํ„ฐ ์žˆ๋Š” ๊ฒฝ์šฐ -1
            if(!visited[computer]) return -1;
            lanLength += lan[computer];
        }

        // ์ „์ฒด ๊ธธ์ด - ์‚ฌ์šฉ ๋žœ์„  ๊ธธ์ด = ๊ธฐ๋ถ€ํ•  ๋žœ์„  ์ตœ๋Œ€ ๊ธธ์ด
        return totalLength - lanLength;
    }

    static class Computer implements Comparable<Computer> {
        private int computer;
        private int length;

        public Computer(int computer, int length) {
            this.computer = computer;
            this.length = length;
        }

        public int getComputer() {
            return computer;
        }

        public int getLength() {
            return length;
        }

        @Override
        public int compareTo(Computer o) {
            return Integer.compare(this.length, o.length);
        }
    }
}
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithm > ๊ทธ๋ž˜ํ”„(Graph)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€, Java] 2623๋ฒˆ : ์Œ์•…ํ”„๋กœ๊ทธ๋žจ  (0) 2022.08.09
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, Java] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ  (0) 2022.08.09
[๋ฐฑ์ค€, Java] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ  (0) 2022.05.13
[๋ฐฑ์ค€, Java] 1707๋ฒˆ : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„  (0) 2022.04.27
    'Algorithm/๊ทธ๋ž˜ํ”„(Graph)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [๋ฐฑ์ค€, Java] 2623๋ฒˆ : ์Œ์•…ํ”„๋กœ๊ทธ๋žจ
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, Java] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ
    • [๋ฐฑ์ค€, Java] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ
    • [๋ฐฑ์ค€, Java] 1707๋ฒˆ : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„
    Zayson
    Zayson
    ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

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