입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하기
스택 요소 접근할때는 stack.get(i); 형태로 접근
stringbuffer와 stringbuilder 다시 복습하기
내 풀이 '('를 만나면 스택에 넣고 ')'를 만나면 pop을 하는 구조
문자열을 넣엇을땐 스택이 비어있지 않고 '('가 peek이면 문자열을 push
import java.util.*;
public class Main {
public String Solution(String s1){
String ans = "";
char[] arr1 = s1.toCharArray();
Stack<Character> st = new Stack<>();
for(char x : arr1){
if(x == '(') st.push(x);
else if (x == ')') st.pop();
else {
if(!st.empty() && st.peek() == '(') continue;
else st.push(x);
}
}
while (!st.empty())ans += st.pop();
StringBuffer sb = new StringBuffer(ans);
return sb.reverse().toString();
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
String s1 = in.next();
System.out.print(T.Solution(s1));
}
}
강의 풀이 여는괄호나 알파벳을 만나면 push,
닫는 괄호를 만나면 여는 괄호까지 pop
간단하게 구현할수 있다..
import java.util.*;
public class Main {
public String Solution(String s1){
String ans = "";
char[] arr1 = s1.toCharArray();
Stack<Character> st = new Stack<>();
for(char x : arr1){
if (x==')') while (st.pop() != '(');
else st.push(x);
}
for(int i =0; i < st.size(); i++) ans += st.get(i);
return ans;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
String s1 = in.next();
System.out.print(T.Solution(s1));
}
}