algorithm

괄호문자제거

juuuuuuun 2024. 5. 22. 16:21

설명

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

 

입력

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

 

출력

남은 문자만 출력한다.

예시 입력 1 

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

 

예시 출력 1

EFLM

 

소스 코드 1

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

//괄호문자제거
public class Main {

    public static String solution(String str) {
        String ans="";
        Stack<Character> stack = new Stack<>();
        for (Character x : str.toCharArray()) {
            if (x == '(') {
                stack.push(x);
            } else if (x == ')') {
                if (stack.isEmpty()) { //괄호 밖인 경우
                    ans += x;
                } else { //닫을 괄호가 남았을 경우
                    stack.pop();
                }
            } else { //그냥 문자인 경우
                if (stack.isEmpty()) { //괄호 밖인 경우
                    ans += x;
                }
            }
        }
        return ans;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(solution(str));
    }
}

 

소스 코드 2

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

//괄호문자제거 다른 풀이
public class Main {

    public static String solution(String str) {
        String ans="";
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < str.length(); i++) {
            stack.push(str.charAt(i));
            if (str.charAt(i) == ')') { // 닫는 괄호를 만나면
                while (stack.pop() != '(') { // '(' 과 ')' 와 사이의 알파벳을 모두 삭제
                }
            }
        }

        for (int i = 0; i < stack.size(); i++) { //스택에 남은 알파벳 순서대로 출력
            ans += stack.get(i);
        }
        return ans;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(solution(str));
    }
}