[알고리즘] 05.Stack, Queue(자료구조) / 02. 괄호문자제거

less than 1 minute read

괄호문자제거

설명

입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.

입력

첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.

출력

남은 문자만 출력한다.

예시 입력 1

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

예시 출력 1

EFLM

느낀점

좀 더 단순하게 생각해도 좋을 것 같다

코드

import java.util.Scanner;
import java.util.Stack;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main T = new Main();
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		System.out.print(T.solution(str));
	}

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

	//방법1
	public String solution(String str) {
		String answer = "";
		Stack<Character> stack = new Stack<>();

		for(char x : str.toCharArray()) {
			if(x == '(') {
				stack.push(x);
			}else {
				if(stack.isEmpty()) {
					answer+= x;
				}else if(x == ')'){
					stack.pop();
				}
			}
		}
		return answer;
	}

	//방법2
	public 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;
	}

}