문제 풀이 (JAVA)

import java.util.*;
public class part5_2 {

	public static void main(String[] args) {
		// 괄호문자제거
		Scanner input = new Scanner(System.in);
		
		String str = input.nextLine();
	
		String answer = solution(str);
		System.out.print(answer);

	}
	private static String solution(String str) {
		String result="";
		Stack<Character> stack = new Stack<>();
		for(Character ch : str.toCharArray()) {
			if(ch != ')') { // 닫는 가로가 아니라면 스택에 추가
				stack.push(ch);
			}else { // 닫는 가로일시 닫는가로가 아닐동안 스택 제거
				while(stack.peek() != '(') {
					stack.pop();
				}
				// while문 종료시 닫는 가로를 만나므로 제거
				if(stack.peek() == '(') {
					stack.pop();
				}
			}
		}
		for(int i=0; i<stack.size(); i++) {
			if(stack.isEmpty() != true) {
				result+= stack.get(i); // stack.pop() 사용시 size가 바뀌므로 제대로 출력 안됨.
			}
		}
						
		return result;
	}
}

주요 핵심 포인트

1.  닫는 괄호가 아닐때에는 스택에 넣어준다.

2. 닫는 괄호를 만날시 여는 괄호를 만날때까지 pop으로 제거, 마지막 여는 괄호를 한번더 pop으로 제거한다.

 

개선해야할 사항

1. 처음에 제대로 출력이 되지 않아 애를 먹었는데, 문자열에 추가할때 for문을 stack.size()로 돌리면서 stack.pop()을 사용하여 출력하였기 때문에 제대로 출력하지 못하는것이 원인이었다. pop을 사용하면 사이즈가 바뀌기 때문에 for문이 제대로 동작하지 못한다. 따라서 stack.get()을 이용하여 스택을 추출하도록 주의해야겠다.

+ Recent posts