์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[์Šคํƒ] 2. ๊ด„ํ˜ธ๋ฌธ์ž์ œ๊ฑฐ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 1. 8. 21:54
2. ๊ด„ํ˜ธ๋ฌธ์ž์ œ๊ฑฐ
 

์„ค๋ช…

์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์—์„œ ์†Œ๊ด„ํ˜ธ ( ) ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‚จ์€ ๋ฌธ์ž๋งŒ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

์ž…๋ ฅ

์ฒซ ์ค„์— ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 100์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

๋‚จ์€ ๋ฌธ์ž๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

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

(A(BC)D)EF(G(H)(IJ)K)LM(N)

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

EFLM

 

 

<<ํ’€์ด>>

 

-๋‚˜์˜ ํ’€์ด-

 

์‹œ๊ฐ„๋ณต์žก๋„ : O(N)

 

์šฐ์„  ์ด ๋ฌธ์ œ๋Š” Stack ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ˆ˜์›”ํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

'(' ์ด ์‹œ์ž‘์ด ๋˜๋ฉด cnt๋Š” 1์„ ๋”ํ•˜๊ณ , ')'๊ฐ€ ์žˆ์œผ๋ฉด cnt์— 1์„ ๋บ€๋‹ค. ์ด๋ ‡๊ฒŒ ๋Œ๋‹ค๊ฐ€

 

cnt = 0 ์ด ๋˜๋Š” ์‹œ์  ๋ถ€ํ„ฐ stack์—๋‹ค๊ฐ€ ๋„ฃ์–ด์ค€๋‹ค.

 

Stack์€ LIFO ํ˜•ํƒœ์ด๋ฏ€๋กœ, ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ answer์— ๋ฌธ์ž๋ฅผ ๋”ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์งœ์„œ ์ •๋‹ต์„ ๋„์ถœํ–ˆ๋‹ค!

 

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

class Main {
    private String solution(String n) {
        Stack<Character> stack = new Stack<>();
        int cnt = 0;
        for(char x : n.toCharArray()) {
            if(x == '(') cnt++;
            else if (x == ')') cnt--;
            else if (cnt == 0) stack.push(x);
        }
        int stackSize = stack.size();
        String answer = "";
        for(int i = 0; i < stackSize; i++) {
            answer = stack.pop() + answer;
        }

        return answer;
    }



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

 

-๊ฐ•์‚ฌ๋‹˜ ํ’€์ด-

 

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

class Main {
    private String solution(String str) {
        String answer = "";
        Stack<Character> stack = new Stack<>();
        for (char x : str.toCharArray()) {
            if (x == ')') {
                while (stack.pop() != '(');
            } else stack.push(x);
            }
            for (int i = 0; i < stack.size(); i++) answer += stack.get(i);
            return answer;
        }


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

 

๊ฐ•์‚ฌ๋‹˜์€ ๋‚˜๋ž‘ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ Stack์„ ํ™œ์šฉํ–ˆ์ง€๋งŒ, ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค. 

 

์šฐ์„  ์ „์ฒด์ ์ธ ํ๋ฆ„์€ ๊ฐ’์„ ๋Œ๋ฉด์„œ stack์— ๋„ฃ๋‹ค๊ฐ€ ) ์ด ๋‚˜์˜ค๋ฉด ( ๋‚˜์˜ค๊ธฐ ๊นŒ์ง€ popํ•œ๋‹ค ! ๊ทธ๋Ÿฐ์‹์œผ๋กœ ํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ ๋‚จ๋Š” ๊ฒƒ์„ answer์— ๋”ํ•˜๋ฉด์„œ ๊ฐ’์„ ๋„์ถœํ•œ๋‹ค.

 

ํŠน์ง•์€ 

 

 answer += stack.get(i);

 

๋‚˜๋Š” ์—ฌํƒœ๊ป Stack ๋ฉ”์„œ๋“œ์—๋Š” get()์—†๋Š” ์ค„ ์•Œ์•˜๋‹ค. ๊ทผ๋ฐ get์ด ์žˆ์—ˆ๊ณ  ์ด๋Ÿฌ๋ฉด ๊ตณ์ด stack์˜ ํŠน์„ฑ LIFO๋ฅผ ์ƒ๊ฐ ์•ˆ ํ•˜๊ณ  ๊ฐ’์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค !

 

๋˜ํ•œ, 

 

while (stack.pop() != '(');

 

์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ( ์ด๊ฐ’์ด ๋‚˜์˜ค๊ธฐ๊นŒ์ง€ pop์„ ์‹œํ‚ค๋Š”๋ฐ ์–ด ๊ทธ๋Ÿฌ๋ฉด  ๋งˆ์ง€๋ง‰  ( ์€ ์ œ๊ฑฐ ์•ˆ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€?? ํ•˜์ง€๋งŒ ์‚ฌ์‹ค์ƒ popํ•˜๊ณ ๋‚˜์„œ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ์—†๋Š” ์ƒํ™ฉ์ด ๋œ๋‹ค!! ์ด๋Ÿฐ ์ ์„ ์ž˜ ํŒŒ์•…ํ•˜์ž ~~