์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch05. Stack, Queue (์ž๋ฃŒ๊ตฌ์กฐ) : ํฌ๋ ˆ์ธ ์ธํ˜• ๋ฝ‘๊ธฐ (์นด์นด์˜ค)

2023. 10. 27. 14:23ใ†์ธํ”„๋Ÿฐ/์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„

728x90

 

https://hyejin.tistory.com/1233

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch05. Stack, Queue (์ž๋ฃŒ๊ตฌ์กฐ) : ๊ด„ํ˜ธ ๋ฌธ์ž ์ œ๊ฑฐ

https://hyejin.tistory.com/1232 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch05. Stack, Queue (์ž๋ฃŒ๊ตฌ์กฐ) : ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ https://hyejin.tistory.com/1231 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜4. HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set) :

hyejin.tistory.com

-> ์ด์ „ ๋ฌธ์ œ ํ’€์ด 

 

 

 

3. ํฌ๋ ˆ์ธ ์ธํ˜• ๋ฝ‘๊ธฐ 

 

์„ค๋ช…

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

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

๊ฒŒ์ž„ ํ™”๋ฉด์€ 1 x 1 ํฌ๊ธฐ์˜ ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ N x N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐ ๊ฒฉ์ž์ด๋ฉฐ ์œ„์ชฝ์—๋Š” ํฌ๋ ˆ์ธ์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

(์œ„ ๊ทธ๋ฆผ์€ 5 x 5 ํฌ๊ธฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค). ๊ฐ ๊ฒฉ์ž ์นธ์—๋Š” ๋‹ค์–‘ํ•œ ์ธํ˜•์ด ๋“ค์–ด ์žˆ์œผ๋ฉฐ ์ธํ˜•์ด ์—†๋Š” ์นธ์€ ๋นˆ์นธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์ธํ˜•์€ 1 x 1 ํฌ๊ธฐ์˜ ๊ฒฉ์ž ํ•œ ์นธ์„ ์ฐจ์ง€ํ•˜๋ฉฐ ๊ฒฉ์ž์˜ ๊ฐ€์žฅ ์•„๋ž˜ ์นธ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ์‚ฌ์šฉ์ž๋Š” ํฌ๋ ˆ์ธ์„ ์ขŒ์šฐ๋กœ ์›€์ง์—ฌ์„œ ๋ฉˆ์ถ˜ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ธํ˜•์„ ์ง‘์–ด ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง‘์–ด ์˜ฌ๋ฆฐ ์ธํ˜•์€ ๋ฐ”๊ตฌ๋‹ˆ์— ์Œ“์ด๊ฒŒ ๋˜๋Š” ๋ฐ,

์ด๋•Œ ๋ฐ”๊ตฌ๋‹ˆ์˜ ๊ฐ€์žฅ ์•„๋ž˜ ์นธ๋ถ€ํ„ฐ ์ธํ˜•์ด ์ˆœ์„œ๋Œ€๋กœ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ [1๋ฒˆ, 5๋ฒˆ, 3๋ฒˆ] ์œ„์น˜์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์ธํ˜•์„ ์ง‘์–ด ์˜ฌ๋ ค ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

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

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

ํฌ๋ ˆ์ธ ์ž‘๋™ ์‹œ ์ธํ˜•์ด ์ง‘์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ์—†์œผ๋‚˜ ๋งŒ์•ฝ ์ธํ˜•์ด ์—†๋Š” ๊ณณ์—์„œ ํฌ๋ ˆ์ธ์„ ์ž‘๋™์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๋Ÿฐ ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

ํฌ๋ ˆ์ธ์„ ๋ชจ๋‘ ์ž‘๋™์‹œํ‚จ ํ›„ ํ„ฐํŠธ๋ ค์ ธ ์‚ฌ๋ผ์ง„ ์ธํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

 

์ž…๋ ฅ

์ฒซ ์ค„์— ์ž์—ฐ์ˆ˜ N(5<=N<=30)์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N*N board ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

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

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

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

board๋ฐฐ์—ด์ด ๋๋‚œ ๋‹ค์Œ์ค„์— moves ๋ฐฐ์—ด์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ค„์—๋Š” moves ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

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

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

 

์ถœ๋ ฅ

์ฒซ ์ค„์— ํ„ฐํŠธ๋ ค์ ธ ์‚ฌ๋ผ์ง„ ์ธํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ž…๋ ฅ 1 

5
0 0 0 0 0
0 0 1 0 3
0 2 5 0 1
4 2 4 4 2
3 5 1 3 1
8
1 5 3 5 1 2 1 4

 

์˜ˆ์‹œ ์ถœ๋ ฅ 1

4

 

 

๋ฌธ์ œ ํ’€์ด 1

public int solution(int n, int[][] board, int m, int[] moves)
{
   int answer = 0;
   Stack<Integer> stack = new Stack<>();
   
   for (int i = 0; i < m; i++)
   {
      for (int j = 0; j < n; j++)
      {
         if (board[j][moves[i] - 1] != 0)
         {
            if (!stack.isEmpty()) {
               if (stack.peek() == board[j][moves[i] - 1]) {
                  stack.pop();
                  answer += 2;
               }else
               {
                  stack.push(board[j][moves[i] - 1]);
               }
            }else {
               stack.push(board[j][moves[i] - 1]);
            }
            board[j][moves[i] - 1] = 0;
            break;
         }
      }
   }
   
   return answer;
}

๐Ÿ‘ฉ‍๐Ÿ’ป : ์ด ๋ฌธ์ œ๋„ ์—ญ์‹œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ํ’€์–ด๋ดค๋˜ ์ ์ด ์žˆ๋˜ ๋ฌธ์ œ์ด๋‹ค. ๋ฌผ๋ก  ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋Š”์ง€ ๊ธฐ์–ต์ด ๊ฐ€๋ฌผ๊ฐ€๋ฌผํ•ด์„œ ๋‹ค์‹œ ํ’€์–ด๋ณด์ž! ๋ผ๋Š” ๋งˆ์ธ๋“œ๋กœ ๋‹ค์‹œ ํ’€์—ˆ๋‹ค. 

n x n board ๋ฐฐ์—ด์ด ํ•˜๋‚˜ ์ฃผ์–ด์ง€๊ณ , ๊ทธ ๋‹ค์Œ ํฌ๋ ˆ์ธ์ด ์›€์ง์ด๋Š” ์œ„์น˜๋ฅผ ์ €์žฅํ•œ moves ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง„๋‹ค. 

๊ทธ ๋‹ค์Œ ์ธํ˜•์„ ๋ฝ‘์•„์„œ ๋‹ด์„ ๊ณต๊ฐ„์ด ํ•„์š”ํ•œ๋ฐ ์ด ๊ณต๊ฐ„์„ Stack์œผ๋กœ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. 

 

์ด์ค‘ for๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ฒซ๋ฒˆ์งธ for๋ฌธ๋Š” moves ๋ฐฐ์—ด ๊ธธ์ด๋งŒํผ ๋Œ๊ณ , ๋‘๋ฒˆ์งธ for๋ฌธ์€ board์˜ ๊ธธ์ด๋งŒํผ ๋Œ๋ฉด ๋œ๋‹ค. 

board[j][moves[i-1]] ๋กœ ๊ตฌํ•˜๋ฉด ๋˜๋Š”๋ฐ move๋ฐฐ์—ด์— ์ €์žฅ๋œ ํฌ๋ ˆ์ธ์ด ์›€์ง์ด๋Š” ์œ„์น˜๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— -1์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

 

if (!stack.isEmpty()) {
   if (stack.peek() == board[j][moves[i] - 1]) {
      stack.pop();
      answer += 2;
   }else
   {
      stack.push(board[j][moves[i] - 1]);
   }
}

๊ทธ board[j][moves[i-1]] ์ด ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ฉด ์ธํ˜•์„ ๋ฝ‘์•„์„œ stack์— pushํ•˜๋ฉด ๋˜๋Š”๋ฐ ์ด๋•Œ stack์ด ๋น„์–ด์žˆ์ง€์•Š์„ ๋•Œ๋Š” stack์˜ peek ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋งจ ์œ„์˜ ๊ฐ’๊ณผ ๋น„๊ตํ•ด์„œ ๊ฐ™์œผ๋ฉด ๊ทธ๋ƒฅ push ํ•˜์ง€๋ง๊ณ  pop ํ•ด์„œ ๊ทธ ๊ฐ’์„ ๊บผ๋‚ด์ฃผ๋ฉด ๋œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  answer์—๋Š” +2๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  stack์ด ๋น„์–ด์žˆ์„ ๋•Œ ํ˜น์€ ๋น„์–ด์žˆ์ง€ ์•Š์€๋ฐ peekํ•œ ๊ฐ’๊ณผ ๋‹ค๋ฅด๋ฉด ๊ทธ๋• stack์— push ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

board[j][moves[i] - 1] = 0;
break;

๊ทธ ๋‹ค์Œ์—” ์ธํ˜•์„ ๋ฝ‘์•„ stack์— ๋„ฃ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— board[j][moves[i-1]] ์— ๊ฐ’์„ 0์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๊ณ , break ํ•ด์•ผ ํ•œ๋‹ค. 

break ์•ˆํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ๋‹ค์Œ ์ธํ˜•์„ ๋˜ ๋ฝ‘๊ธฐ ๋•Œ๋ฌธ์— break ํ•ด์ค˜์•ผ ํ•œ๋‹ค! 

 

๊ทธ๋ฆฌ๊ณ  answer ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค. 

 

 

 

 

๋ฌธ์ œ ํ’€์ด 2

public int solution2(int[][] board, int[] moves)
{
   int answer = 0;
   Stack<Integer> stack = new Stack<>();
   
   for (int pos : moves)
   {
      for (int i = 0; i< board.length; i++)
      {
         if (board[i][pos - 1] != 0) {
            int tmp = board[i][pos - 1];
            board[i][pos-1] = 0;
            if (!stack.isEmpty() && tmp == stack.peek())
            {
               answer += 2;
               stack.pop();
            }else {
               stack.push(tmp);
            }
            break;
         }
      }
   }
   
   return answer;
}

๐Ÿ‘พ : ๊ฐ•์‚ฌ๋‹˜๋„ ๋‚˜๋ž‘ ๋™์ผํ•˜๊ฒŒ ํ’€์—ˆ๋Š”๋ฐ, board[j][pos[i-1]]  ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด tmp ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ board[j][pos[i-1]] ๊ฐ’์„ ์ €์žฅํ•ด๋‘๊ณ , board[j][pos[i-1]]๋Š” 0 ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. 

๊ทธ ๋‹ค์Œ stack์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด์„œ, stack peekํ•œ ๊ฐ’์ด board[j][pos[i-1]]์™€ ๊ฐ™๋‹ค๋ฉด stack์—์„œ pop ํ•ด์ฃผ๊ณ , answer ์— +2๋ฅผ ํ•ด์ค€๋‹ค. 

stack์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ํ˜น์€ board[j][pos[i-1]]์˜ ๊ฐ’์ด peekํ•œ ๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด stack์— push ํ•ด์ฃผ๊ณ , break ํ•˜๋ฉด ๋œ๋‹ค. 

 

(๋‚˜๋Š” ์กฐ๊ฑด๋ฌธ์„ ๋‚˜๋ˆ ์„œ ํ•˜๋Š๋ผ๊ณ  ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ์ƒ๊ฒผ๋˜ ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐ•์‚ฌ๋‹˜์ฒ˜๋Ÿผ ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค!) 

 

 

 

 

 

728x90