Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_괄호문자제거_Stack) 본문
알고리즘/인프런 - Java알고리즘 입문
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_괄호문자제거_Stack)
slow-walker 2023. 9. 30. 03:59
2. 괄호문자제거
예시 입력 1
(A(BC)D)EF(G(H)(IJ)K)LM(N)
예시 출력 1
EFLM
내가 푼 풀이(Time: 167ms Memory: 27MB)
나는 여는 괄호 만나서 pop해줄때 peek()함수를 사용해서 상단에 있는걸 체크한다음에 pop해주고 while문 나와서 남은 여는 괄호를 빼내기 위해 한번 더 pop를 했는데, 아예 pop함수 자체가 빼낸걸 리턴한다고 한다.
그리고 stack에서도 get(int idx)함수로 탐색한걸 하나씩 출력할 수 있다고 한다.
import java.util.Scanner;
import java.util.Stack;
public class Main {
public String solution(String str) {
StringBuilder sb = new StringBuilder();
Stack<Character> stack = new Stack<>();
for (Character x : str.toCharArray()) {
// 여는 괄호랑 알파벳은 무조건 push
if (x != ')') stack.push(x);
// 닫는 괄호 만났을때 여는 괄호를 만나기 전까지 pop~
else {
// 여는 괄호 만나기 전까지 pop
while (stack.peek() != '(') {
stack.pop();
}
stack.pop(); // 여는 괄호 pop
}
}
for (Character x : stack) {
sb.append(x);
}
return sb.toString();
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
강의 풀이(Time: 158ms Memory: 27MB)
import java.util.Scanner;
import java.util.Stack;
public class Answer {
public String solution(String str) {
String answer = "";
Stack<Character> stack = new Stack<>();
for (Character x : str.toCharArray()) {
// 닫는 괄호 만나면 pop
if (x == ')') {
// pop함수는 꺼낸 것을 리턴
while(stack.pop() != '(');
// 여는 괄호랑 알파벳일 경우 push
} else stack.push(x);
}
for (int i = 0; i < stack.size(); i++) answer += stack.get(i);
return answer;
}
public static void main(String[] args) {
Answer T = new Answer();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}