괄호문자제거

Seungmin Lim·2022년 2월 11일
0

코딩문제연습

목록 보기
40/63

문제

나의풀이

import java.util.*;

class Main {
	public String solution(String s) {
			String answer = "";
			Stack<Character> stack = new Stack<>();
			for(char x: s.toCharArray()) {
				if(x == ')') {
					while(!(stack.lastElement() == '(')) stack.pop();
					if(stack.lastElement() == '(') stack.pop();
				}
				else stack.push(x);
			}
			for(char x : stack) answer += x;
			return answer;
	}
		    
	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String s = kb.next();
		System.out.println(T.solution(s));
	}
	
}

++ while문 수정

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

풀이방법

나는 ')'를 만나면 여태 쌓아온 stack에서 '('를 만날때까지 pop시키기 위해 lastElement가 '('가 아니라면 pop을계속하고 '('를 만난순간 까지 pop시키고 다음으로 넘어갔다.

하지만 while(stack.pop() != ' ( ' );을 쓰면
먼저 pop을 시키고 pop은 어떤값을 제거시켰는지 값이 return되기 때문에
해당 값이 '('가 될때까지 적용하면 간단하게 해결된다.
'('가 먼저 pop되고 '('이 아닌지 맞는지 판별한다.

핵심키워드

pop()은 해당 최상단의 값을 제거 시킬뿐만아니라 제거된 값을 return한다는 것을 명심해두자!

0개의 댓글