๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/์ฝ”ํ…Œ TIL

[Java] ํ”Œ๋กœ์ด๋“œโ€“์›Œ์…œ | ๋ฐฑ์ค€ 2660 ํšŒ์žฅ๋ฝ‘๊ธฐ

9taetae9 2024. 10. 31. 08:01
728x90

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

 

์ ‘๊ทผ ๋ฐฉ์‹ :

"๋‹ค๋ฅธ ํšŒ์›๋“ค๊ณผ ๊ฐ€๊นŒ์šฐ ์ •๋„", "์นœ๊ตฌ์˜ ์นœ๊ตฌ" ๋“ฑ์˜ ๋ถ€๋ถ„์„ ์ฝ์—ˆ์„ ๋•Œ, ์Šคํ„ฐ๋”” 1, 2์ผ์ฐจ์— ํ•™์Šตํ–ˆ๋˜ ํ”Œ๋กœ์ด๋“œ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๋А๊ปด์กŒ๋‹ค.

 

์–ด๋А ํšŒ์›์˜ ์ ์ˆ˜๊ฐ€ n์ ์ด๋ฉด ๋‹ค๋ฅธ๋ชจ๋“  ํšŒ์›์ด ์นœ๊ตฌ์ด๊ฑฐ๋‚˜, ... , [์นœ๊ตฌ์˜]*(n-1) ์นœ๊ตฌ์ž„์„ ๋งํ•œ๋‹ค๊ณ  ์ดํ•ดํ–ˆ๊ณ , ์ฆ‰ n์ ์ด๋ฉด ์ตœ์ ์˜ ๊ด€๊ณ„๋ฅผ ๊ตฌํ–ˆ์„ ๋•Œ ํ•ด๋‹น ํšŒ์›์œผ๋กœ ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š” ํšŒ์›์€ n-1๊ฐœ์˜ ๋‹ค๋ฅธ ์นœ๊ตฌ(๋…ธ๋“œ๋“ค)์„ ๊ฑฐ์ณ์„œ ์—ฐ๊ฒฐ๋œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํ•ด์„ํ–ˆ๋‹ค.

 

๊ฐ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค๋กœ์˜ ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•œ๋’ค,

๊ฐ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ์žˆ๋Š” ๋…ธ๋“œ์™€์˜ ๊ฐ„์„  ์ˆ˜๊ฐ€ ๊ทธ ๋…ธ๋“œ์˜ ์ ์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด์„ํ•˜๋‹ˆ ๋ฐฑ์ค€ 1389 ์ผ€๋นˆ ๋ฒ ์ด์ปจ์˜ 6๋‹จ๊ณ„ ๋ฒ•์น™๊ณผ ๊ฐ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค๋กœ์˜ ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€ ์™„์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋๋‹ค.

 

๋‹ค๋ฅธ ์ ์€ ๋ฐฑ์ค€ 1389 ์ผ€๋นˆ ๋ฒ ์ด์ปจ์˜ 6๋‹จ๊ณ„ ๋ฒ•์น™์—์„œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ์™€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค๊ณผ์˜ ์ด ๊ฑฐ๋ฆฌ๋ฅผ ํ•ฉํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—” ๊ฑฐ๋ฆฌ๋“ค์ค‘ ์ตœ๋Œ€๊ฐ’์„ ๊ทธ ๋…ธ๋“œ์˜ ์ ์ˆ˜๋กœ ์ •ํ•˜๊ณ , ์ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋…ธ๋“œ๋“ค์„ ๊ตฌํ•œ๋‹ค๋Š” ๊ฒƒ ๋ฐ–์— ์—†๋‹ค.

 

 

์šฐ์„  friend ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ์ตœ์•…์„ ๊ฒฝ์šฐ๋กœ ๋ฐฐ์—ด ๊ฐ’์„ ์ดˆ๊ธฐํ™” ์‹œ์ผฐ๋‹ค. ๋ฌธ์ œ์—์„œ ํšŒ์›์˜ ์ˆ˜๊ฐ€ 50๋ช…์ด ์ตœ๋Œ€๋ผ๊ณ  ํ•˜์˜€์œผ๋ฏ€๋กœ ์ตœ๋Œ€ 49๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฑฐ์น  ์ˆ˜ ์žˆ์–ด 49๋กœ ๋ชจ๋“  ๊ฐ’์„ ์ดˆ๊ธฐํ™”์‹œ์ผฐ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฒ˜์Œ ์ œ์ถœํ• ๋•Œ ์‹คํŒจ ์›์ธ์ด ๋˜๋Š” ๋ถ€๋ถ„์ด ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ, friend[i][i], ์ฆ‰ ์ž๊ธฐ ์ž์‹ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ 0์œผ๋กœ ๋‘์ง€ ์•Š์•„ ์ดํ›„ ํ”Œ๋กœ์ด๋“œ์›Œ์…œ์„ ์ ์šฉํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜๋‹ค.

friend = new int[N + 1][N + 1];

for(int i=1; i<=N; i++){
    Arrays.fill(friend[i], 49);
    friend[i][i] = 0;
}

 

์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๊ด€๊ณ„๋“ค 1๋กœ ์—…๋ฐ์ดํŠธ

while (true) {
    StringTokenizer st = new StringTokenizer(br.readLine());
    int u1 = Integer.parseInt(st.nextToken());
    int u2 = Integer.parseInt(st.nextToken());

    if (u1 == -1 && u2 == -1) break;

    friend[u1][u2] = friend[u2][u1] = 1;
}

 

ํ”Œ๋กœ์ด๋“œ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ

for (int k = 1; k <= N; k++) {
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++) {
            if (friend[i][j] > friend[i][k] + friend[k][j] ) {
                friend[i][j] = friend[i][k] + friend[k][j];
            }
        }
    }
}

 

์ด๋ถ€๋ถ„๊นŒ์ง€ ์™”์„ ๋•Œ ๋ฐฐ์—ด friend์˜ 1ํ–‰๋ถ€ํ„ฐ nํ–‰์—๋Š” ๊ฐ๊ฐ ํšŒ์›๋ฒˆํ˜ธ 1๊ณผ ๋‹ค๋ฅธ ํšŒ์›๋“ค ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋“ค ~ ํšŒ์›๋ฒˆํ˜ธ n๊ณผ ๋‹ค๋ฅธ ํšŒ์›๋“ค ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋“ค์˜ ์ตœ์ ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋“ค์–ด์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

์ด์ œ ๊ฐ ํšŒ์› ๋ฒˆํ˜ธ์˜ ์ ์ˆ˜๋ฅผ ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๊ฐ ํ–‰์—์„œ ๊ฐ€์žฅ ํฐ(๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ) ์ ์ˆ˜๋ฅผ ์ฐพ์•„ ๊ทธ๊ฒƒ์˜ ๊ทธ ํšŒ์› ๋ฒˆํ˜ธ์˜ ์ ์ˆ˜๋กœ ์ง€์ •ํ–ˆ๋‹ค.

int[] userScore = new int[N + 1];

for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) {
        userScore[i] = Math.max(friend[i][j], userScore[i]);
    }
}

๊ทธ๋ ‡๊ฒŒ ๊ตฌํ•œ ํšŒ์› ๋ฒˆํ˜ธ์˜ ์ ์ˆ˜๋“ค ์ค‘ ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋“ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜์˜€๋‹ค. ์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ด ๋ถ€๋ถ„์€ ํšŒ์› ๋ฒˆํ˜ธ์˜ ์ ์ˆ˜๋ฅผ ์ •ํ•˜๋Š” ๊ณผ์ •๊ณผ ํ•ฉ์น˜๋ฉด ๋” ๊ฐ„๋‹จํ•ด์งˆ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. (min = Math.min(userScore[i],min)) ์ด ๋ถ€๋ถ„์„ ํšŒ์› ๋ฒˆํ˜ธ i์˜ for(int j =1; j<=N; j++) ๋ฃจํ”„๊ฐ€ ๋๋‚ ๋•Œ ๋งˆ๋‹ค ๋‹ค์Œ ํšŒ์›๋ฒˆํ˜ธ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ์ „ ์ตœ์†Œ ์ ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.)

int min = 49;
for (int i = 1; i <= N; i++) {
    min = Math.min(userScore[i], min);
}
System.out.print(min + " ");

๊ทธ๋‹ค์Œ ์ตœ์†Œ ์ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ํšŒ์› ์ˆ˜๋ฅผ ๊ตฌํ•˜์˜€๊ณ 

int cnt = 0;
for (int i = 1; i <= N; i++) {
    if (userScore[i] == min) cnt++;
}
System.out.println(cnt);

๊ทธ ์ตœ์†Œ ์ ์ˆ˜์— ํ•ด๋‹น ๋˜๋Š” ํšŒ์›๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•ด ์ฃผ์—ˆ๋‹ค.

for (int i = 1; i <= N; i++) {
    if (min == userScore[i]) System.out.print(i + " ");
}

 

 

๋А๋‚€์  : 

๊ฐ™์€ ์œ ํ˜•์ธ ํ”Œ๋กœ์ด๋“œ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ 3์ผ์งธ ํ‘ธ๋‹ˆ ์ฒ˜์Œ ํ”Œ๋กœ์ด๋“œ์›Œ์…œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ๋ณด๋‹ค ๋” ์ต์ˆ™ํ•ด์ง„ ๋А๋‚Œ์ด์—ฌ์„œ ์ข‹์•˜๊ณ , ์•ž์œผ๋ก  ๋” ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ๋ฏผ์„ ํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค.

 

728x90