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));
}
}