본문 바로가기
알고리즘(Java)/Stack & Queue

[알고리즘]Stack - 괄호문자 제거

by snowballchoi 2021. 8. 4.

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

입력) 첫 줄에 문자열이 주어집니다.
출력) 남은 문자만 출력합니다.

 

 

1)

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

public class Main {
	
	public static String solution(String str) {
		String answer = "";
		Stack<Character> stack = new Stack<>();
		
		for (char x : str.toCharArray()) {
			if (x==')') {
				while (stack.pop()!='('); // pop한 것을 return // '('를 pop하고 멈춤
			} 
			else stack.push(x); // '('와 문자는 push
		}
		for (int i=0; i<stack.size(); i++) answer += stack.get(i);
		return answer;
	}

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

}

 

2)

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

public class Main {
	
	public static String solution(String str) {
		String answer = "";
		Stack<Character> stack = new Stack<>();
		
		for (char x : str.toCharArray()) {
			if (x==')') {
				int last = stack.lastIndexOf('(');
				int size = stack.size();
				for (int i=last; i<size; i++) {
					stack.pop(); // 가장 가까운 '('부터 모든 문자 pop
				}				
			} 
			else stack.push(x); // '('와 문자는 push
		}
		for (char x : stack) {
			answer += x;
		}
		return answer;
	}

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

}

결과

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

출력
EFLM

댓글