[Stack, Queue] 5. ์‡ ๋ง‰๋Œ€๊ธฐ

2023. 1. 30. 11:41
 
์„ค๋ช…

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

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

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

๋์ ์€ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ๋†“๋Š”๋‹ค.

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

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

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

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

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

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

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

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

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

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

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

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

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

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

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

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

17

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

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

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

24

ํ’€์ด

package Inflearn;

import java.util.Scanner;
import java.util.Stack;

public class n40_์‡ ๋ง‰๋Œ€๊ธฐ {
    public static int solution(String str) {
        Stack<Character> stack = new Stack<>();
        char pre = ' ';
        int ans = 0;
        for(char c : str.toCharArray()) {
            // ')'๊ฐ€ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ
            if(c == ')') {
                // ๋ ˆ์ด์ €์ธ ๊ฒฝ์šฐ
                if(pre == '(') {
                    stack.pop();
                    ans += stack.size();
                }
                // ๋ง‰๋Œ€๊ธฐ์˜ ๋์ ์ธ ๊ฒฝ์šฐ
                else {
                    stack.pop();
                    ans += 1;
                }
            }
            // '('๊ฐ€ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ
            else if(c == '(')
                stack.push('(');
            pre = c;
        }
        return ans;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(solution(str));
    }
}

'('๊ฐ€ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ์—๋Š” ๋ฌด์กฐ๊ฑด stack์— pushํ•˜๊ณ , ')'๊ฐ€ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ์—๋Š” ๋ ˆ์ด์ €์ธ์ง€ ๋ง‰๋Œ€๊ธฐ์˜ ๋์ ์ธ์ง€ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค.

pre๋ผ๋Š” ๋ณ€์ˆ˜์— ์ด์ „์— ๋“ค์–ด์˜จ ๋ฌธ์ž๋ฅผ ์ €์žฅํ•˜๊ณ , ๋งŒ์•ฝ '(' ๋‹ค์Œ์œผ๋กœ ')'๊ฐ€ ๋‚˜์˜จ ๊ฒฝ์šฐ๋Š” ๋ ˆ์ด์ €๋กœ ํŒ๋‹จํ•œ๋‹ค.

์ด ๊ฒฝ์šฐ์—๋Š” stack size๋งŒํผ ์ž˜๋ ค์ง„ ๋ง‰๋Œ€๊ธฐ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฏ€๋กœ ans์— stack ์‚ฌ์ด์ฆˆ๋ฅผ ๋”ํ•ด์ค€๋‹ค.

๋งŒ์•ฝ ๋ง‰๋Œ€๊ธฐ์˜ ๋์ ์ธ ๊ฒฝ์šฐ์—๋Š” stack์„ pop ์‹œ์ผœ์ฃผ๊ณ , ans++ ํ•ด์ฃผ์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

BELATED ARTICLES

more