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

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

728x90

 

https://hyejin.tistory.com/1234

 

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

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

hyejin.tistory.com

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

 

 

 

4. ํ›„์œ„์‹ ์—ฐ์‚ฐ (postfix) 

์„ค๋ช…

ํ›„์œ„์—ฐ์‚ฐ์‹์ด ์ฃผ์–ด์ง€๋ฉด ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

๋งŒ์•ฝ 3*(5+2)-9 ์„ ํ›„์œ„์—ฐ์‚ฐ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด 352+*9- ๋กœ ํ‘œํ˜„๋˜๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋Š” 12์ž…๋‹ˆ๋‹ค.

 

์ž…๋ ฅ

์ฒซ ์ค„์— ํ›„์œ„์—ฐ์‚ฐ์‹์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์‹์˜ ๊ธธ์ด๋Š” 50์„ ๋„˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹์€ 1~9์˜ ์ˆซ์ž์™€ +, -, *, / ์—ฐ์‚ฐ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

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

352+*9-

 

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

12

 

 

 

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

public int solution(String str)
{
   int answer = 0;
   Stack<Integer> stack = new Stack<>();
   
   for (char c : str.toCharArray())
   {
      if (Character.isDigit(c)) {
         stack.push((int) c - 48);
      }else {
         int a = stack.pop();
         int b = stack.pop();
         switch (c) {
            case '+':
               answer = b + a ;
               break;
            case '-':
               answer = b - a ;
               break;
            case '*':
                answer = b * a;
               break;
            case '/':
               answer = b / a;
               break;
         }
         stack.push(answer);
         answer =0;
      }
   }
   
   return stack.get(0);
}

๐Ÿ‘ฉ‍๐Ÿ’ป : ์ด ๋ฌธ์ œ๋Š” ์ˆซ์ž์ผ ๋•Œ๋Š” stack์— ๋„ฃ์–ด๋’€๋‹ค๊ฐ€ ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋‚˜๋ฉด stack์—์„œ ๋‘๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๊บผ๋‚ด์„œ ์—ฐ์‚ฐํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ stack์— ๋„ฃ์–ด๋‘๋ฉด ๋œ๋‹ค. 

 

๊ทธ๋ž˜์„œ ์šฐ์„  Character.isDigit() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž๊ฐ€ ์ˆซ์ž์ด๋ฉด stack.pushํ•˜๋Š”๋ฐ ์ด๋•Œ, ๋ฌธ์ž c ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋„ฃ์œผ๋ฉด c๊ฐ€ '3' ์ผ๋•Œ stack์— 51 ๊ฐ’์ด stack์— ๋‹ด๊ธด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ '0'์˜ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” 48์„ ๋นผ์ค˜์•ผ ํ•œ๋‹ค. 

 

๊ทธ ๋‹ค์Œ ์—ฐ์‚ฐ์ž์ด๋ฉด ์ด์ œ stack์—์„œ 2๊ฐœ์˜ ๊ฐ’์„ ๊บผ๋‚ด์„œ a, b ๋ณ€์ˆ˜์— ๋‹ด์•˜๋‹ค. 

๊ทธ ๋‹ค์Œ +, -, *, / ์—ฐ์‚ฐ์ž์— ํ•ด๋‹นํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๋Š”๋ฐ ์ด๋•Œ, ํ›„์œ„ ์—ฐ์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— b๊ฐ€ ๋จผ์ € ๊ณ„์‚ฐ๋˜์–ด์•ผ ํ•œ๋‹ค. 

๊ทธ ๋‹ค์Œ ์ด ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ stack์— pushํ•ด์ฃผ๋ฉด ๋˜๊ณ , answer ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค.  (์‚ฌ์‹ค answer ์ดˆ๊ธฐํ™” ์ด๋Ÿฐ ๊ณผ์ • ์—†์ด ๋ฐ”๋กœ stack์— ๋„ฃ์œผ๋ฉด ๋๋˜ ๊ฒƒ์ž„..!) 

 

๊ทธ ๋‹ค์Œ ๋งจ ๋งˆ์ง€๋ง‰๊นŒ์ง€ stack์— ๋‚จ์•„์žˆ๋Š” ๊ฐ’์ด ์ตœ์ข… ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์ด๊ธฐ ๋•Œ๋ฌธ์— stack.get(0) ๊ฐ’์„ ๊บผ๋‚ด์„œ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

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

public int solution2(String str)
{
   Stack<Integer> stack = new Stack<>();
   
   for (char c : str.toCharArray())
   {
      if (Character.isDigit(c)) {
         stack.push(c - 48);
      }else
      {
         int rt = stack.pop();
         int lt = stack.pop();
         
         if (c == '+') {
            stack.push(lt + rt);
         }
         else if (c == '-') {
            stack.push(lt - rt);
         }
         else if (c == '*') {
            stack.push(lt * rt);
         }
         else if (c == '/') {
            stack.push(lt / rt);
         }
      }
   }
   
   return stack.get(0);
}

๐Ÿ‘พ : ๊ฐ•์‚ฌ๋‹˜๋„ ๋‚˜๋ž‘ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ lt, rt ๋กœ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋‘์–ด ์ข€ ๋” ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค. 

๊ทธ ๋‹ค์Œ, stack์— ๋ฐ”๋กœ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ push ํ–ˆ๊ณ , ๊ทธ ๋‹ค์Œ stack.get(0) ์„ ๋ฆฌํ„ดํ•ด์คฌ๋‹ค. 

 

 

 

 

 

 

 

728x90