ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ] 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„
    Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ/others 2020. 7. 4. 20:28

    ๋ฌธ์ œ ์„ค๋ช…

    ๊ฒŒ์ž„๊ฐœ๋ฐœ์ž์ธ ์ฃ ๋ฅด๋””๋Š” ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ธฐ๊ณ„๋ฅผ ๋ชจ๋ฐ”์ผ ๊ฒŒ์ž„์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    ์ฃ ๋ฅด๋””๋Š” ๊ฒŒ์ž„์˜ ์žฌ๋ฏธ๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ํ™”๋ฉด ๊ตฌ์„ฑ๊ณผ ๊ทœ์น™์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒŒ์ž„ ๋กœ์ง์— ๋ฐ˜์˜ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

     

     

    ๊ฒŒ์ž„ ํ™”๋ฉด์€ 1 x 1 ํฌ๊ธฐ์˜ ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ N x N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐ ๊ฒฉ์ž์ด๋ฉฐ ์œ„์ชฝ์—๋Š” ํฌ๋ ˆ์ธ์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (์œ„ ๊ทธ๋ฆผ์€ 5 x 5 ํฌ๊ธฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค). ๊ฐ ๊ฒฉ์ž ์นธ์—๋Š” ๋‹ค์–‘ํ•œ ์ธํ˜•์ด ๋“ค์–ด ์žˆ์œผ๋ฉฐ ์ธํ˜•์ด ์—†๋Š” ์นธ์€ ๋นˆ์นธ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ธํ˜•์€ 1 x 1 ํฌ๊ธฐ์˜ ๊ฒฉ์ž ํ•œ ์นธ์„ ์ฐจ์ง€ํ•˜๋ฉฐ ๊ฒฉ์ž์˜ ๊ฐ€์žฅ ์•„๋ž˜ ์นธ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์‚ฌ์šฉ์ž๋Š” ํฌ๋ ˆ์ธ์„ ์ขŒ์šฐ๋กœ ์›€์ง์—ฌ์„œ ๋ฉˆ์ถ˜ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ธํ˜•์„ ์ง‘์–ด ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง‘์–ด ์˜ฌ๋ฆฐ ์ธํ˜•์€ ๋ฐ”๊ตฌ๋‹ˆ์— ์Œ“์ด๊ฒŒ ๋˜๋Š” ๋ฐ, ์ด๋•Œ ๋ฐ”๊ตฌ๋‹ˆ์˜ ๊ฐ€์žฅ ์•„๋ž˜ ์นธ๋ถ€ํ„ฐ ์ธํ˜•์ด ์ˆœ์„œ๋Œ€๋กœ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ์€ [1๋ฒˆ, 5๋ฒˆ, 3๋ฒˆ] ์œ„์น˜์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์ธํ˜•์„ ์ง‘์–ด ์˜ฌ๋ ค ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

     

     

    ๋งŒ์•ฝ ๊ฐ™์€ ๋ชจ์–‘์˜ ์ธํ˜• ๋‘ ๊ฐœ๊ฐ€ ๋ฐ”๊ตฌ๋‹ˆ์— ์—ฐ์†ํ•ด์„œ ์Œ“์ด๊ฒŒ ๋˜๋ฉด ๋‘ ์ธํ˜•์€ ํ„ฐ๋œจ๋ ค์ง€๋ฉด์„œ ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์œ„ ์ƒํƒœ์—์„œ ์ด์–ด์„œ [5๋ฒˆ] ์œ„์น˜์—์„œ ์ธํ˜•์„ ์ง‘์–ด ๋ฐ”๊ตฌ๋‹ˆ์— ์Œ“์œผ๋ฉด ๊ฐ™์€ ๋ชจ์–‘ ์ธํ˜• ๋‘ ๊ฐœ๊ฐ€ ์—†์–ด์ง‘๋‹ˆ๋‹ค.

     

     

    ํฌ๋ ˆ์ธ ์ž‘๋™ ์‹œ ์ธํ˜•์ด ์ง‘์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ์—†์œผ๋‚˜ ๋งŒ์•ฝ ์ธํ˜•์ด ์—†๋Š” ๊ณณ์—์„œ ํฌ๋ ˆ์ธ์„ ์ž‘๋™์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๋Ÿฐ ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ”๊ตฌ๋‹ˆ๋Š” ๋ชจ๋“  ์ธํ˜•์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฌ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. (๊ทธ๋ฆผ์—์„œ๋Š” ํ™”๋ฉดํ‘œ์‹œ ์ œ์•ฝ์œผ๋กœ 5์นธ๋งŒ์œผ๋กœ ํ‘œํ˜„ํ•˜์˜€์Œ)

    ๊ฒŒ์ž„ ํ™”๋ฉด์˜ ๊ฒฉ์ž์˜ ์ƒํƒœ๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด board์™€ ์ธํ˜•์„ ์ง‘๊ธฐ ์œ„ํ•ด ํฌ๋ ˆ์ธ์„ ์ž‘๋™์‹œํ‚จ ์œ„์น˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด moves๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ํฌ๋ ˆ์ธ์„ ๋ชจ๋‘ ์ž‘๋™์‹œํ‚จ ํ›„ ํ„ฐํŠธ๋ ค์ ธ ์‚ฌ๋ผ์ง„ ์ธํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

     

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

    • board ๋ฐฐ์—ด์€ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํฌ๊ธฐ๋Š” 5 x 5 ์ด์ƒ 30 x 30 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

    • board์˜ ๊ฐ ์นธ์—๋Š” 0 ์ด์ƒ 100 ์ดํ•˜์ธ ์ •์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค.

      • 0์€ ๋นˆ ์นธ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

      • 1 ~ 100์˜ ๊ฐ ์ˆซ์ž๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ธํ˜•์˜ ๋ชจ์–‘์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ฐ™์€ ์ˆซ์ž๋Š” ๊ฐ™์€ ๋ชจ์–‘์˜ ์ธํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    • moves ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

    • moves ๋ฐฐ์—ด ๊ฐ ์›์†Œ๋“ค์˜ ๊ฐ’์€ 1 ์ด์ƒ์ด๋ฉฐ board ๋ฐฐ์—ด์˜ ๊ฐ€๋กœ ํฌ๊ธฐ ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

     

    ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋‚˜

    import java.util.Stack;
    import java.util.HashMap;
    
    class Solution {
        public int solution(int[][] board, int[] moves) {
            int answer = 0;
            // <K, V> -> <# Col, Stack>
            Stack<Integer> basket = new Stack<>();
            HashMap<Integer, Stack<Integer>> grid = new HashMap<Integer, Stack<Integer>>();
            
            // init
            for(int i = board.length - 1; i >= 0; i--) {
                for(int j = 0; j < board[i].length; j++) {
                    int col = j + 1;
                    
                    if(board[i][j] != 0) {
                        Integer doll = Integer.valueOf(board[i][j]);
                            
                        if(grid.containsKey(col)) {
                            Stack<Integer> stack = grid.get(col);
                            stack.push(doll);
                            grid.replace(col, stack);
                        }
                        else {
                            Stack<Integer> stack = new Stack<Integer>();
                            stack.push(doll);
                            grid.put(col, stack);
                        }
                    }
                }
            }
            
            for(int move : moves) {
                Stack<Integer> stack = grid.get(move);
                
                if(!stack.isEmpty()) {
                    Integer doll = stack.pop();
                    
                    // remove two dolls
                    if(basket.size() > 0 && basket.peek() == doll) {
                        basket.pop();
                        answer += 2;
                    } 
                    else {
                        basket.push(doll);
                    }
                }
            }
            
            return answer;
        }
    }

     

    ์™œ ์ €๋ ‡๊ฒŒ ํ’€์—ˆ๋‚˜

    ํฌ๊ธฐ๊ฐ€ n X n ์ธ board์™€ basket์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

    ์ธํ˜•์ด ์Œ“์ด๋Š” ๋ชจ์Šต์„ ๋ณด๋‹ˆ ์Šคํƒ์ด ๋– ์˜ฌ๋ž๊ณ  ๊ฐ col๋ณ„๋กœ ์ธํ˜•์„ ์Œ“์ด๋Š” ๋ชจ์Šต์„ ๋ณด๋‹ˆ ํ•ด์‹œ๋งต์ด ๋– ์˜ฌ๋ž๋‹ค. ๊ทธ๋ž˜์„œ key๊ฐ’์ด col์ด๊ณ  value๊ฐ€ stack์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ board๋ฅผ ํ‘œํ˜„ํ–ˆ๋‹ค.

    Basket๋„ ์ธํ˜•์ด ์Œ“์ด๋‹ˆ ๊ทธ ๋ชจ์Šต์„ ๋ณด๊ณ  ์Šคํƒ์ด ๋– ์˜ฌ๋ž๋‹ค.

     

    ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ •ํ•˜๊ณ ๋‚˜๋‹ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ„๋‹จํ–ˆ๋‹ค.

    ๋จผ์ € ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜์ธ 2์ฐจ์› ๋ฐฐ์—ด board๋ฅผ traverseํ•˜๋ฉด์„œ board๋ฅผ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ํฌ๋ ˆ์ธ์ด ๋ฉˆ์ถ”๋Š” ์œ„์น˜๋“ค์„ ๋ชจ์•„๋†“์€ moves๋ฅผ traverseํ•˜๋ฉด์„œ board์—์„œ ์ธํ˜•์„ ๊บผ๋‚ด basket์— addํ–ˆ๋‹ค. ์ด๋•Œ ๋งŒ์•ฝ addํ•˜๋ ค๋Š” ์ธํ˜•๊ณผ top์— ์žˆ๋Š” ์ธํ˜•์ด ๊ฐ™์œผ๋ฉด ์ธํ˜•์„ addํ•˜์ง€ ์•Š๊ณ  popํ•œ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ™์€ ์ธํ˜• ๋‘ ๊ฐœ๊ฐ€ ๋งŒ๋‚˜ ํ„ฐ์กŒ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— answer๋ฅผ 2 ์ฆ๊ฐ€ํ•œ๋‹ค.

     

    ๋ฌด์—‡์„ ๋ฐฐ์› ๋‚˜

    ์ด ๋ฌธ์ œ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š”๊ฐ€๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ์˜€๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

    ์ด ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ๊ธฐ์ดˆ์˜ ์ค‘์š”์„ฑ์„ ์žฌํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.