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

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

728x90

 

https://hyejin.tistory.com/1235

 

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

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

hyejin.tistory.com

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

 

 

5. ์‡ ๋ง‰๋Œ€๊ธฐ 

์„ค๋ช…

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ๋ ˆ์ด์ €๋กœ ์ ˆ๋‹จํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํšจ์œจ์ ์ธ ์ž‘์—…์„ ์œ„ํ•ด์„œ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ์•„๋ž˜์—์„œ ์œ„๋กœ ๊ฒน์ณ ๋†“๊ณ ,

๋ ˆ์ด์ €๋ฅผ ์œ„์—์„œ ์ˆ˜์ง์œผ๋กœ ๋ฐœ์‚ฌํ•˜์—ฌ ์‡ ๋ง‰๋Œ€๊ธฐ๋“ค์„ ์ž๋ฅธ๋‹ค. ์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด์ €์˜ ๋ฐฐ์น˜๋Š” ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.

 

-  ์‡ ๋ง‰๋Œ€๊ธฐ๋Š” ์ž์‹ ๋ณด๋‹ค ๊ธด ์‡ ๋ง‰๋Œ€๊ธฐ ์œ„์—๋งŒ ๋†“์ผ ์ˆ˜ ์žˆ๋‹ค.

- ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ๋‹ค๋ฅธ ์‡ ๋ง‰๋Œ€๊ธฐ ์œ„์— ๋†“๋Š” ๊ฒฝ์šฐ ์™„์ „ํžˆ ํฌํ•จ๋˜๋„๋ก ๋†“๋˜, ๋์ ์€ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ๋†“๋Š”๋‹ค.

- ๊ฐ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ์ž๋ฅด๋Š” ๋ ˆ์ด์ €๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์กด์žฌํ•œ๋‹ค.

-  ๋ ˆ์ด์ €๋Š” ์–ด๋–ค ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ์–‘ ๋์ ๊ณผ๋„ ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์˜ˆ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์ˆ˜ํ‰์œผ๋กœ ๊ทธ๋ ค์ง„ ๊ตต์€ ์‹ค์„ ์€ ์‡ ๋ง‰๋Œ€๊ธฐ์ด๊ณ , ์ ์€ ๋ ˆ์ด์ €์˜ ์œ„์น˜,

 

์ˆ˜์ง์œผ๋กœ ๊ทธ๋ ค์ง„ ์ ์„  ํ™”์‚ดํ‘œ๋Š” ๋ ˆ์ด์ €์˜ ๋ฐœ์‚ฌ ๋ฐฉํ–ฅ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋ ˆ์ด์ €์™€ ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๋ฐฐ์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. ๋ ˆ์ด์ €๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ์˜ ์ธ์ ‘ํ•œ ์Œ ‘( ) ’ ์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋˜ํ•œ, ๋ชจ๋“  ‘( ) ’๋Š” ๋ฐ˜ ๋“œ์‹œ ๋ ˆ์ด์ €๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

2. ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ์™ผ์ชฝ ๋์€ ์—ฌ๋Š” ๊ด„ํ˜ธ ‘ ( ’ ๋กœ, ์˜ค๋ฅธ์ชฝ ๋์€ ๋‹ซํžŒ ๊ด„ํ˜ธ ‘) ’ ๋กœ ํ‘œํ˜„๋œ๋‹ค.

 

์œ„ ์˜ˆ์˜ ๊ด„ํ˜ธ ํ‘œํ˜„์€ ๊ทธ๋ฆผ ์œ„์— ์ฃผ์–ด์ ธ ์žˆ๋‹ค.

์‡ ๋ง‰๋Œ€๊ธฐ๋Š” ๋ ˆ์ด์ €์— ์˜ํ•ด ๋ช‡ ๊ฐœ์˜ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ ค์ง€๋Š”๋ฐ, ์œ„ ์˜ˆ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์‡ ๋ง‰๋Œ€๊ธฐ๋Š” ๊ฐ๊ฐ 3๊ฐœ์™€ 2๊ฐœ์˜ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ ค์ง€๊ณ ,

์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์–ด์ง„ ์‡ ๋ง‰๋Œ€๊ธฐ๋“ค์€ ์ด 17๊ฐœ์˜ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ ค์ง„๋‹ค.

์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด์ €์˜ ๋ฐฐ์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ด„ํ˜ธ ํ‘œํ˜„์ด ์ฃผ์–ด์กŒ์„ ๋•Œ,

์ž˜๋ ค์ง„ ์‡ ๋ง‰๋Œ€๊ธฐ ์กฐ๊ฐ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

ํ•œ ์ค„์— ์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด์ €์˜ ๋ฐฐ์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ด„ํ˜ธ ํ‘œํ˜„์ด ๊ณต๋ฐฑ์—†์ด ์ฃผ์–ด์ง„๋‹ค. ๊ด„ํ˜ธ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ 100,000์ด๋‹ค.

 

์ถœ๋ ฅ

์ž˜๋ ค์ง„ ์กฐ๊ฐ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋ฅผ ํ•œ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

 

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

()(((()())(())()))(())

 

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

17

 

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

(((()(()()))(())()))(()())

 

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

24

 

 

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

public int solution(String str)
{
   int answer = 0;
   Stack<Character> stack = new Stack<>();
   char[] chars = str.toCharArray();
   stack.push(chars[0]);
   
   for (int i = 1; i < chars.length; i++)
   {
      if (chars[i] == '(')
      {
         stack.push(chars[i]);
      }
      else
      {
         stack.pop();
         if (chars[i - 1] == '(') { // ๋ ˆ์ด์ €
            answer += stack.size();
         }else { // ๋ง‰๋Œ€๊ธฐ ๋
            answer++;
         }
      }
   }
   
   return answer;
}

๐Ÿ‘ฉ‍๐Ÿ’ป : ์ด ๋ฌธ์ œ ์—ญ์‹œ Stack์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  () ์ด๋ฉด ๋ ˆ์ด์ €์ด๊ณ , ) ๋งŒ ์žˆ์œผ๋ฉด ๊ทธ์ € ๋ง‰๋Œ€๊ธฐ์ผ ๋ฟ์ด๋‹ค. 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ( ์ผ๋•Œ๋Š” ์ผ๋‹จ stack์— push ํ•˜๊ณ ,  )์ผ๋•Œ๋Š” ์ผ๋‹จ Stack์—์„œ pop๋ฅผ ํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ์ด์ „ ๋ฌธ์ž๋ฅผ ๋ณด๊ณ  (์ด๋ฉด ๋ ˆ์ด์ €์ด๋ฏ€๋กœ stack์— ์Œ“์ธ ๋ง‰๋Œ€๊ธฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ , ์ด์ „ ๋ฌธ์ž๊ฐ€ )์ผ ๋•Œ๋Š” ๋ ˆ์ด์ €๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๋ง์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ๋ง‰๋Œ€๊ธฐ์˜ ๊ฐœ์ˆ˜๋งŒ answer์— ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

 

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

public int solution2(String str)
{
   int answer = 0;
   Stack<Character> stack = new Stack<>();
   
   for (int i = 0; i < str.length(); i++)
   {
      if (str.charAt(i) == '(') {
         stack.push('(');
      }else {
         stack.pop();
         if (str.charAt(i - 1) == '(') {
            answer += stack.size();
         }else
         {
            answer++;
         }
      }
   }
   
   return answer;
}

๐Ÿ‘พ : ๊ฐ•์‚ฌ๋‹˜๋„ ๋™์ผํ•˜๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋Š”๋ฐ, ๋‹ค๋ฅธ ์ ์€ ๊ทธ๋ƒฅ for๋ฌธ์„ i = 0 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

๋‚˜๋Š” ์ž˜๋ชป ์ƒ๊ฐํ•ด์„œ )๊ฐ€ ๋จผ์ € ๋“ค์–ด์˜ฌ ์ˆ˜๋„ ์žˆ์ง€ ์•Š๋‚˜? ์‹ถ์–ด์„œ ๋ฌธ์ž ๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค 0 ์€ ๋ฏธ๋ฆฌ stack์— pushํ•ด์ฃผ๊ณ , for๋ฌธ ๋ฐฐ์—ด์„ i = 1 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๋‹ค. (๊ทผ๋ฐ ')'๋ถ€ํ„ฐ ๋“ค์–ด์˜ฌ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ทธ๋ƒฅ ํ•ด๋„ ๋๋‹ค.. ใ…Žใ…Ž) 

๋‚˜๋Š” ๋ฌธ์ž์—ด์„ ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ๊ฐ•์‚ฌ๋‹˜์€ ๋ฌธ์ž์—ด์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ charAt์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90