ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ณ ๋“์  kit ์ •์ˆ˜ ์‚ผ๊ฐํ˜•
    Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ/Programmers 2020. 8. 4. 15:40

    ๐Ÿ“š ๋ฌธ์ œ ์„ค๋ช…

     

    ์œ„์™€ ๊ฐ™์€ ์‚ผ๊ฐํ˜•์˜ ๊ผญ๋Œ€๊ธฐ์—์„œ ๋ฐ”๋‹ฅ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ๊ฒฝ๋กœ ์ค‘, ๊ฑฐ์ณ๊ฐ„ ์ˆซ์ž์˜ ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์นธ์œผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ ์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์™ผ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 3์—์„œ๋Š” ๊ทธ ์•„๋ž˜์นธ์˜ 8 ๋˜๋Š” 1๋กœ๋งŒ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    ์‚ผ๊ฐํ˜•์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด triangle์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฑฐ์ณ๊ฐ„ ์ˆซ์ž์˜ ์ตœ๋Œ“๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

     

    ์ œํ•œ์‚ฌํ•ญ

    • ์‚ผ๊ฐํ˜•์˜ ๋†’์ด๋Š” 1 ์ด์ƒ 500 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • ์‚ผ๊ฐํ˜•์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์ˆซ์ž๋Š” 0 ์ด์ƒ 9,999 ์ดํ•˜์˜ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

     

    ๐ŸŽฏ ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋‚˜

    1. DFS  (50/ 100) - ํšจ์œจ์„ฑ ํ†ต๊ณผ ๐Ÿ™…‍โ™€๏ธ๐Ÿ™…‍โ™‚๏ธ๐Ÿ™…

    	class Solution {
    	    public int solution(int[][] triangle) {
    	        return dfs(triangle, 0, 0, triangle[0][0]);
    	    }
    	    
    	    public int dfs(int[][] arr, int lev, int idx, int sum) {
    	        if(lev == arr.length - 1) return sum;
    	        
    	        return Math.max(dfs(arr, lev + 1, idx, sum + arr[lev + 1][idx]) //left
    	                       ,dfs(arr, lev + 1, idx + 1, sum + arr[lev + 1][idx + 1])); // right
    	    }
    	}

     

    2. DP - ๋ชจ๋‘ ํ†ต๊ณผ ๐Ÿ˜ป๐Ÿ˜บ๐Ÿ˜ธ

    	class Solution {
    	    public int solution(int[][] triangle) {
    	        int answer = Integer.MIN_VALUE;
    	        
    	        int len = triangle.length;
    	            
    	        for(int i = 0; i < triangle.length; i++) {
    	            if(i == 0) continue;
    	            
    	            int n = triangle[i].length;
    	            
    	            for(int j = 0; j < n; j++) {
    	                int lParent = j - 1;
    	                int rParent = j;
    	                
    	                if(j == 0) { //์™ผ์ชฝ ๋
    	                    triangle[i][j] += triangle[i-1][rParent];
    	                    continue;
    	                }
    	                
    	                if(j == n - 1) { //์˜ค๋ฅธ์ชฝ ๋
    	                    triangle[i][j] += triangle[i-1][lParent];
    	                    continue;
    	                }
    	                
    	                triangle[i][j] += Math.max(triangle[i-1][lParent]
    	                                          ,triangle[i-1][rParent]);
    	            }
    	        }
    	        
    	        for(int i = 0; i < triangle[len-1].length; i++) {
    	            answer = Math.max(answer, triangle[len-1][i]);
    	        }
    	        
    	        return answer;
    	    }
    	}

     

    ๐Ÿง ์™œ ์ €๋ ‡๊ฒŒ ํ’€์—ˆ๋‚˜

    1. DFS  (50/ 100) - ํšจ์œจ์„ฑ ํ†ต๊ณผ ๐Ÿ™…‍โ™€๏ธ๐Ÿ™…‍โ™‚๏ธ๐Ÿ™…

    DFS๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ์€ ๊ฐ„๋‹จํ•˜๋‹ค. ์‚ผ๊ฐํ˜• ๊ผญ๋Œ€๊ธฐ๋ถ€ํ„ฐ ๋ฐ”๋‹ฅ๊นŒ์ง€ ์ญ‰ ๋‚ด๋ ค๊ฐ€๊ณ  ๋ฐ”๋‹ฅ์— ๋„๋‹ฌํ•˜๋ฉด ๊ณ„์‚ฐ๋œ ๊ฐ’์„ return ํ•œ๋‹ค.

    ์ด๋•Œ ํ˜„์žฌ ๋ ˆ๋ฒจ์—์„œ ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ˜„์žฌ ๋ ˆ๋ฒจ์— ์ฃผ๋ชฉํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’์˜ index๊ฐ€ x๋ผ๋ฉด ๋‹ค์Œ ๋ ˆ๋ฒจ์˜ ์™ผ์ชฝ์˜ index๋Š” x, ์˜ค๋ฅธ์ชฝ์˜ index๋Š” x + 1์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ†ตํ•ด ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•œ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ์™ผ์ชฝ์œผ๋กœ ๊ฐˆ ๋•Œ์˜ ํ•ฉ์™€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ ๋•Œ์˜ ํ•ฉ ์ค‘ ๋” ํฐ ๊ฐ’์„ returnํ•œ๋‹ค.

     

    2. DP - ๋ชจ๋‘ ํ†ต๊ณผ ๐Ÿ˜ป๐Ÿ˜บ๐Ÿ˜ธ

    DFS๋ฅผ ํ†ตํ•œ ๋ฐฉ๋ฒ•์€ ์ •ํ™•ํ•˜๋‚˜ ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ•„์š”์—†๋Š” ๊ณ„์‚ฐ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    ์•„๋ž˜์™€ ๊ฐ™์€ ์ •์ˆ˜ ์‚ผ๊ฐํ˜•์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋นจ๊ฐ„์ƒ‰ ์›์ด ๊ทธ๋ ค์ง„ 1๊นŒ์ง€ ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ๊ฐœ์˜ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋‹ค. ์ฒซ๋ฒˆ์งธ ๊ฒฝ๋กœ๋Š” 7 -> 3 -> 1๋กœ ์ด์–ด์ง€๊ณ  ํ•ฉ์€ 11์ด๋‹ค. ๋‘๋ฒˆ์งธ ๊ฒฝ๋กœ๋Š” 7 -> 8 -> 1๋กœ ์ด์–ด์ง€๊ณ  ํ•ฉ์€ 16์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” 1์„ ๊ฐˆ ๋•Œ๋Š” ๋‘๋ฒˆ์งธ ๊ฒฝ๋กœ๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

     

     

    ์ด๋ฅผ ์œ„ํ•ด ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ ๋์ด๋‚˜ ์˜ค๋ฅธ์ชฝ ๋์ด ์•„๋‹ˆ๋ผ๋ฉด ์™ผ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋‚ด๋ ค์˜ค๋Š” ๊ฒฝ๋กœ์™€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋‚ด๋ ค์˜ค๋Š” ๊ฒฝ๋กœ ์ค‘ ํ•ฉ์ด ๋” ํฐ ๊ฒฝ๋กœ๋กœ๋ถ€ํ„ฐ ๋‚ด๋ ค์˜จ๋‹ค๊ณ  ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

     

    ๐Ÿ“– ๋ฌด์—‡์„ ๋ฐฐ์› ๋‚˜

    ํ•„์š”์—†๊ฑฐ๋‚˜ ์ค‘๋ณต๋˜๋Š” ๊ณ„์‚ฐ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ด DP์˜ ๋ณธ์งˆ์ด๋‹ค!

     

    ๋Œ“๊ธ€

Designed by Tistory.