[JAVA] Programmers ์ˆœ์œ„

์ตœํ˜œ์›ยท2021๋…„ 7์›” 8์ผ
0

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
6/7
post-thumbnail

Programmers - ์ˆœ์œ„

  • Graph , Floyd-Warshall
  • Level3

๐Ÿ”—์ˆœ์œ„ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ’€์ด

๋ชจ๋“  ์ •์ ์˜ ์—ฐ๊ฒฐ์˜ ์œ ๋ฌด๋ฅผ ํŒŒ์•…ํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
๋จผ์ € intํ˜•์˜ 2์ฐจ์› ์ธ์ ‘ํ–‰๋ ฌ์„ ์ƒ์„ฑํ•ด์ฃผ๊ณ  ์ตœ๋Œ€๊ฐ’ INF๋ฅผ ์ฑ„์›Œ์ค๋‹ˆ๋‹ค.

	for (int[] arr : matrix) {
        	Arrays.fill(arr, INF);
	}

results์—์„œ ์ธ์ ‘ํ•œ ํ–‰๋ ฌ์€ 1๋กœ ํ‘œ์‹œ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ชจ๋“  ์ •์ ์˜ ๋ชจ๋“  ์ •์ ์œผ๋กœ ๋ถ€ํ„ฐ ์ตœ์†Œ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์ค๋‹ˆ๋‹ค.

	for(int k=1; k<=n; k++) {
        	// ์ถœ๋ฐœ์ง€ 
        	for(int i=1; i<=n; i++) {
        		// ์ถœ๋ฐœ์ง€์™€ ๊ฒฝ์œ ์ง€๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋‹ค์Œ ์ถœ๋ฐœ์ง€ 
        		if(i==k)	continue;
        		// ๋„์ฐฉ์ง€ 
        		for(int j=1; j<=n; j++) {
        			// ๋„์ฐฉ์ง€๊ฐ€ ๊ฒฝ์œ ์ง€๋‚˜ ์ถœ๋ฐœ์ง€์™€ ๊ฐ™๋‹ค๋ฉด continue
        			if(j==k || j==i)	continue;
        			if(matrix[i][j]>matrix[i][k] + matrix[k][j]) {
        				matrix[i][j] = matrix[i][k] + matrix[k][j];
        			}
        		}
        	}
        }

๊ทธ๋ฆฌ๊ณ  ์ธ์ ‘ํ–‰๋ ฌ์„ ํƒ์ƒ‰ํ•˜์—ฌ ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด answer์„ count ํ•ด์ฃผ์–ด ๋‹ต์„ ๊ตฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ง‰ํžŒ์ 

ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์— ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋…์„ ๋‹ค์‹œ ์ตํžŒ ํ›„ ์ ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

์†Œ์Šค์ฝ”๋“œ

import java.util.*;

public class ์ˆœ์œ„ {
	static final int INF = 9999999;
	static int[][] matrix;
	public int solution(int n, int[][] results) {
		int answer = 0;
        // ์ธ์ ‘ํ–‰๋ ฌ 
        matrix = new int[n+1][n+1];
        // INF๋กœ ํ–‰๋ ฌ์„ ๋‹ค ์ฑ„์šด๋‹ค. (์ธ์ ‘ํ•˜์ง€ ์•Š์œผ๋ฉด INF)
        for (int[] arr : matrix) {
        	Arrays.fill(arr, INF);
		}
        // ์ธ์ ‘ํ•œ ํ–‰๋ ฌ์€ 1๋กœ ์ฑ„์šฐ๊ธฐ! ์ŠนํŒจ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋‹จ๋ฑกํ–ฅ ๊ทธ๋ž˜ํ”„ 
        for (int[] arr : results) {
			matrix[arr[0]][arr[1]] = 1;
		}
        // ๊ฒฝ์œ ์ง€ 
        for(int k=1; k<=n; k++) {
        	// ์ถœ๋ฐœ์ง€ 
        	for(int i=1; i<=n; i++) {
        		// ์ถœ๋ฐœ์ง€์™€ ๊ฒฝ์œ ์ง€๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋‹ค์Œ ์ถœ๋ฐœ์ง€ 
        		if(i==k)	continue;
        		// ๋„์ฐฉ์ง€ 
        		for(int j=1; j<=n; j++) {
        			// ๋„์ฐฉ์ง€๊ฐ€ ๊ฒฝ์œ ์ง€๋‚˜ ์ถœ๋ฐœ์ง€์™€ ๊ฐ™๋‹ค๋ฉด continue
        			if(j==k || j==i)	continue;
        			if(matrix[i][j]>matrix[i][k] + matrix[k][j]) {
        				matrix[i][j] = matrix[i][k] + matrix[k][j];
        			}
        		}
        	}
        }
        
        
        for(int i=1; i<=n; i++) {
        	boolean check = true;
        	for(int j=1; j<=n; j++) {
        		// ์ž๊ธฐ ์ž์‹ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ 
        		if(i==j)	continue;
        		// ์–ด๋А ํ•œ์ชฝ์ด๋ผ๋„ ์—ฐ๊ฒฐ์ด ์•ˆ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ false 
        		if(matrix[i][j]==INF && matrix[j][i]==INF) {
        			check = false;
        		}
        	}
        	if(check) {
        		answer++;
        	}
        }
        

        return answer;
        
	      
    }

}

๊ฒฐ๊ณผ

์ •ํ™•์„ฑํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1ํ†ต๊ณผ (0.04ms, 51.9MB)
ํ…Œ์ŠคํŠธ 2ํ†ต๊ณผ (0.07ms, 52.8MB)
ํ…Œ์ŠคํŠธ 3ํ†ต๊ณผ (0.11ms, 53.1MB)
ํ…Œ์ŠคํŠธ 4ํ†ต๊ณผ (0.61ms, 52.6MB)
ํ…Œ์ŠคํŠธ 5ํ†ต๊ณผ (1.87ms, 52.3MB)
ํ…Œ์ŠคํŠธ 6ํ†ต๊ณผ (6.82ms, 55.1MB)
ํ…Œ์ŠคํŠธ 7ํ†ต๊ณผ (12.70ms, 53.1MB)
ํ…Œ์ŠคํŠธ 8ํ†ต๊ณผ (15.29ms, 54.8MB)
ํ…Œ์ŠคํŠธ 9ํ†ต๊ณผ (18.90ms, 55.1MB)
ํ…Œ์ŠคํŠธ 10ํ†ต๊ณผ (27.29ms, 57.3MB)
profile
๋ฉ‹์Ÿ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ ๊บผ์•ผ

0๊ฐœ์˜ ๋Œ“๊ธ€