코딩 테스트(JAVA)/인프런 문제풀이

괄호 문자 제거

Lea Hwang 2022. 3. 16. 22:01

설명

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

 

입력

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

 

출력

남은 문자만 출력한다.

 

예시 입력 1

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

예시 출력 1

EFLM

 

수도 코드

  1. (, 문자는 push
  2. ) 만나면,
    1. (까지 문자열 포함 제거
  3. 최종적으로 남아있는걸 return

 

정답 코드

import java.util.*;

public class ParenthesisDelete {
	public String solution(String str) {
		String answer = "";
		// Stack 만들기
		Stack<Character> stack = new Stack<>();
		// str에 들어온 것을 하나씩 쪼개서 분석
		for(char x : str.toCharArray()) {
			if(x != ')') {
				stack.push(x);
			}else {
				// stack.pop(x)가 아니라 ()
				while(stack.pop() != '(');
			}
		}
		// stack에 있는것을 answer에 담아야한다
		for(int i=0; i<stack.size(); i++) {
			answer += stack.get(i);
		}
		return answer;
	}

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

}

 

💡 str.toCharArray(); 문자열을 한 글자씩 쪼개서 char배열로 변환합니다.

 

💡 pop()은 stack의 최상단부터 꺼내기도 하고, return도 합니다.

 

💡 [[중요]]

) 만나면, stack에 쌓인 문자열을 꺼냅니다. 언제까지? ( 까지 

그것을 코드로 구현하면 while(stack.pop != ‘(’);

 

'코딩 테스트(JAVA) > 인프런 문제풀이' 카테고리의 다른 글

공주 구하기  (0) 2022.03.16
쇠막대기  (0) 2022.03.16
후위식 연산(postfix)  (0) 2022.03.16
크레인 인형뽑기(카카오)  (0) 2022.03.16
올바른 괄호  (0) 2022.03.16