ABOUT ME

-

  • [2021 ์นด์นด์˜ค ๋ธ”๋ผ์ธ๋“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ JAVA
    STUDY ๐Ÿ’›/์•Œ๊ณ ๋ฆฌ์ฆ˜ 2021. 2. 4. 10:07
    ๋ฐ˜์‘ํ˜•

     

    [๋ฌธ์ œ]

    https://programmers.co.kr/learn/courses/30/lessons/72413

     

    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ

    6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4

    programmers.co.kr


    ์ง€์ ์˜ ๊ฐœ์ˆ˜ n, ์ถœ๋ฐœ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” s, A์˜ ๋„์ฐฉ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” a, B์˜ ๋„์ฐฉ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” b, ์ง€์  ์‚ฌ์ด์˜ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์„ ๋‚˜ํƒ€๋‚ด๋Š” fares๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ, A, B ๋‘ ์‚ฌ๋žŒ์ด s์—์„œ ์ถœ๋ฐœํ•ด์„œ ๊ฐ๊ฐ์˜ ๋„์ฐฉ ์ง€์ ๊นŒ์ง€ ํƒ์‹œ๋ฅผ ํƒ€๊ณ  ๊ฐ„๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์ตœ์ € ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•ด์„œ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.
    ๋งŒ์•ฝ, ์•„์˜ˆ ํ•ฉ์Šน์„ ํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ž ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์ด ๋” ๋‚ฎ๋‹ค๋ฉด, ํ•ฉ์Šน์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.



    [์ œํ•œ์‚ฌํ•ญ]

    โ–ช๏ธ์ง€์ ๊ฐฏ์ˆ˜ n์€ 3 ์ด์ƒ 200 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

    โ–ช๏ธ์ง€์  s, a, b๋Š” 1 ์ด์ƒ n ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ๊ฐ๊ธฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ž…๋‹ˆ๋‹ค.
    - ์ฆ‰, ์ถœ๋ฐœ์ง€์ , A์˜ ๋„์ฐฉ์ง€์ , B์˜ ๋„์ฐฉ์ง€์ ์€ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    โ–ช๏ธ fares๋Š” 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

    โ–ช๏ธ fares ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 2 ์ด์ƒ n x (n-1) / 2 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    - ์˜ˆ๋ฅผ๋“ค์–ด, n = 6์ด๋ผ๋ฉด fares ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 2 ์ด์ƒ 15 ์ดํ•˜์ž…๋‹ˆ๋‹ค. (6 x 5 / 2 = 15)
    - fares ๋ฐฐ์—ด์˜ ๊ฐ ํ–‰์€ [c, d, f] ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    - c์ง€์ ๊ณผ d์ง€์  ์‚ฌ์ด์˜ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์ด f์›์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
    - ์ง€์  c, d๋Š” 1 ์ด์ƒ n ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ๊ฐ๊ธฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ž…๋‹ˆ๋‹ค.
    - ์š”๊ธˆ f๋Š” 1 ์ด์ƒ 100,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
    - fares ๋ฐฐ์—ด์— ๋‘ ์ง€์  ๊ฐ„ ์˜ˆ์ƒ ํƒ์‹œ์š”๊ธˆ์€ 1๊ฐœ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ฆ‰, [c, d, f]๊ฐ€ ์žˆ๋‹ค๋ฉด [d, c, f]๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    โ–ช๏ธ์ถœ๋ฐœ์ง€์  s์—์„œ ๋„์ฐฉ์ง€์  a์™€ b๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.




    [Solution]
    - ์ตœ๋‹จ๊ฒฝ๋กœ ๋ฌธ์ œ
    - ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ
    adj[a][b] = min(adj[a][b], adj[a][k]+adj[k][b])
    - f๋Š” 1์ด์ƒ 100,000์ดํ•˜, ์ง€์ ๊ฐฏ์ˆ˜๋Š” 3์ด์ƒ 200์ดํ•˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ 20,000,000์œผ๋กœ ์ดˆ๊ธฐํ™”

    package programmers_ํ•ฉ์Šนํƒ์‹œ์š”๊ธˆ;
    
    import java.util.Arrays;
    
    public class Main {
    	static int[][] d;
    	public static void main(String[] args) {
    		int n = 6;
    		int s = 4; 
    		int a = 6;
    		int b = 2;
    		int[][] fares = {{4, 1, 10}, {3, 5, 24}, {5, 6, 2}, {3, 1, 41}, {5, 1, 24}, {4, 6, 50}, {2, 4, 66}, {2, 3, 22}, {1, 6, 25}};
    		
    		System.out.print(solution(n, s, a, b, fares));
    	}
    	
    	static int solution(int n, int s, int a, int b, int[][] fares) {
    		int answer = 20000000;			//100000*200
    		
    		d = new int[n][n];
    		for(int t[]:d) {
    			Arrays.fill(t, 20000000);
    		}
    		
    		for(int i=0; i<fares.length; ++i) {
    			int start = fares[i][0]-1;
    			int end = fares[i][1]-1;
    			
    			//์–‘๋ฐฉํ–ฅ ์š”๊ธˆ ๋˜‘๊ฐ™์Œ
    			d[start][end] = fares[i][2];
    			d[end][start] = fares[i][2];
    		}
    		
    		//i์—์„œ j๊นŒ์ง€์˜ ์ตœ์†Œ๊ฑฐ๋ฆฌ d[][]
    		for(int k=0; k<n; ++k) {
    			for(int i=0; i<n; ++i) {
    				for(int j=0; j<n; ++j) {
    					if(i==j) {
    						d[i][j] = 0;
    					} else {
    						d[i][j] = Math.min(d[i][j], d[i][k]+d[k][j]);
    					}
    				}
    			}
    		}
    		
    		for(int i=0; i<n; ++i) {
    			answer = Math.min(answer, d[s-1][i] + d[i][a-1] + d[i][b-1]);
    		}
    		
    		return answer;
    	}
    }
    ๋ฐ˜์‘ํ˜•
Designed by Tistory.