๋šœ๋ถ€๋‹ˆ์˜ Devlog

[BOJ] 10159.์ €์šธ (Java)

by ๋šœ๋ถ€๋‹ˆ

 

 

10159๋ฒˆ: ์ €์šธ

์ฒซ ์ค„์—๋Š” ๋ฌผ๊ฑด์˜ ๊ฐœ์ˆ˜ N ์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ๋ฏธ๋ฆฌ ์ธก์ •๋œ ๋ฌผ๊ฑด ์Œ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, 5 ≤ N ≤ 100 ์ด๊ณ , 0 ≤ M ≤ 2,000์ด๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์— ๋ฏธ๋ฆฌ ์ธก์ •๋œ ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ

www.acmicpc.net

 

์ด ๋ฌธ์ œ์—์„œ๋Š” N๊ฐœ์˜ ๋ฌผ๊ฑด, M ๊ฐœ์˜ ๋ฌผ๊ฑด์Œ์ด ์ฃผ์–ด์ง€๋ฉฐ,

๋ฌผ๊ฑด i์™€ ๋น„๊ต ๊ฒฐ๊ณผ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๋ฌผ๊ฑด ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ(Floyd-Warshall) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ์€ ๋ชจ๋“  ์ •์ ์—์„œ ๋ชจ๋“  ์ •์ ์œผ๋กœ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ,

๊ฑฐ์ณ๊ฐ€๋Š” ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต๋ฌธ 3๊ฐœ๊ฐ€ ์ค‘์ฒฉ๋˜์–ด ์žˆ๋Š”๋ฐ,

์ œ์ผ ๋ฐ”๊นฅ์ชฝ ๋ฐ˜๋ณต๋ฌธ์€ ๊ฑฐ์ณ๊ฐ€๋Š” ๊ผญ์ง“์ , ๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ์€ ์ถœ๋ฐœํ•˜๋Š” ๊ผญ์ง“์ , ์„ธ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ์€ ๋„์ฐฉํ•˜๋Š” ๊ผญ์ง“์ ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ๊ฑฐ์ณ๊ฐ€๋Š” ์ •์ ์— ๋Œ€ํ•ด ์ฒดํฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Ž๐Ÿ˜Ž

 

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

class Main {

    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()); // ๋ฌผ๊ฑด ์ˆ˜
        int M = Integer.parseInt(br.readLine()); // ๋ฌผ๊ฑด ์Œ์˜ ์ˆ˜

        StringTokenizer st;
        int[][] relation= new int[N+1][N+1];

        int num1, num2;
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            num1 = Integer.parseInt(st.nextToken());
            num2 = Integer.parseInt(st.nextToken());
            relation[num1][num2] = 1; // num1 > num2
            relation[num2][num1] = -1; // num1 < num2
        }

        floydWarshall(N, relation);

        int cnt;
        for (int i = 1; i <= N; i++){
            cnt = N-1; // ์ž์‹ ์„ ์ œ์™ธํ•œ ์ „์ฒด ๋ฌผ๊ฑด ์ˆ˜
            for (int j = 1; j <= N; j++) {
                if (relation[i][j] != 0) // ๋ฌผ๊ฑด์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์•„๋Š” ๊ฒฝ์šฐ
                    cnt--; // ์•„๋Š” ๋งŒํผ ์ค„์—ฌ์คŒ
            }
            bw.write(String.valueOf(cnt) + '\n');
        }

        bw.flush();
        bw.close();
        br.close();
    }

    public static int[][] floydWarshall(int N, int[][] relation) {

        for (int k = 1; k <= N; k++) { // ๊ฑฐ์ฒ˜๊ฐ€๋Š” ๊ผญ์ง“์ 
            for (int s = 1; s <=N; s++) { // ์ถœ๋ฐœํ•˜๋Š” ๊ผญ์ง“์ 
                for (int e = 1; e <= N; e++) { // ๋„์ฐฉํ•˜๋Š” ๊ผญ์ง“์ 
                    if (relation[s][k] != 0 && relation[s][k] == relation[k][e]) {
                        // 0์ด ์•„๋‹ ๋•Œ => s๊ฐ€ k๋ณด๋‹ค ๋ฌด๊ฑฐ์šด ๋˜๋Š” ๊ฐ€๋ฒผ์šด ๋ฌผ๊ฑด์ผ ๋•Œ
                        // s-k์™€ k-e๊ฐ€ ๊ฐ™์œผ๋ฉด s-e๋„ ๊ฐ™์œผ๋ฏ€๋กœ s-e์— s-k๊ฐ’ ๋Œ€์ž…ํ•˜์—ฌ ์„œ๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ
                        relation[s][e] = relation[s][k];
                    }
                }
            }
        }

        return relation;

    }

}

 

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

[BOJ] 1759.์•”ํ˜ธ๋งŒ๋“ค๊ธฐ (Java)  (0) 2021.06.20
[BOJ] 12094.A์™€ B (Java)  (0) 2021.06.10
[BOJ] 1043.๊ฑฐ์ง“๋ง (Java)  (0) 2021.04.30
[BOJ] 5430.AC (Java)  (0) 2021.04.30
[BOJ] 5052.์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก (Java)  (0) 2021.04.30

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

๋šœ๋ถ€๋‹ˆ์˜ Devlog

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ