설명
입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.
입력
첫 줄에 문자열이 주어진다. 문자열의 길이는 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));
}
}
'algorithm' 카테고리의 다른 글
후위식 연산(postfix) (0) | 2024.05.24 |
---|---|
크레인 인형뽑기(카카오) (0) | 2024.05.22 |
올바른 괄호 / stack (0) | 2024.05.21 |
K번째 큰 수 / TreeSet (0) | 2024.05.18 |
모든 아나그램 찾기 (1) | 2024.05.16 |