개발자는 기록이 답이다

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_괄호문자제거_Stack) 본문

알고리즘/인프런 - Java알고리즘 입문

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_괄호문자제거_Stack)

slow-walker 2023. 9. 30. 03:59

 

 

2. 괄호문자제거

 

예시 입력 1 

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

예시 출력 1

EFLM

 

내가 푼 풀이(Time: 167ms Memory: 27MB)

 나는 여는 괄호 만나서 pop해줄때 peek()함수를 사용해서 상단에 있는걸 체크한다음에 pop해주고 while문 나와서 남은 여는 괄호를 빼내기 위해 한번 더 pop를 했는데, 아예 pop함수 자체가 빼낸걸 리턴한다고 한다.

 

그리고 stack에서도 get(int idx)함수로 탐색한걸 하나씩 출력할 수 있다고 한다.

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

public class Main {
    public String solution(String str) {
        StringBuilder sb = new StringBuilder();
        Stack<Character> stack = new Stack<>();
        for (Character x : str.toCharArray()) {
            // 여는 괄호랑 알파벳은 무조건 push
            if (x != ')') stack.push(x);
            // 닫는 괄호 만났을때 여는 괄호를 만나기 전까지 pop~
            else {
                // 여는 괄호 만나기 전까지 pop
                while (stack.peek() != '(') {
                    stack.pop();
                }
                stack.pop(); // 여는 괄호 pop
            }
        }
        for (Character x : stack) {
            sb.append(x);
        }
        return sb.toString();
    }

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

 

강의 풀이(Time: 158ms Memory: 27MB)

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

public class Answer {
    public String solution(String str) {
        String answer = "";
        Stack<Character> stack = new Stack<>();
        for (Character x : str.toCharArray()) {
        	// 닫는 괄호 만나면 pop
            if (x == ')') {
                // pop함수는 꺼낸 것을 리턴
                while(stack.pop() != '(');
            // 여는 괄호랑 알파벳일 경우 push
            } else stack.push(x);
        }
        for (int i = 0; i < stack.size(); i++) answer += stack.get(i);
        return answer;
    }

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