.
설명
입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.
입력
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
출력
남은 문자만 출력한다
예시 입력 1
(A(BC)D)EF(G(H)(IJ)K)LM(N)
예시 출력 1
EFLM
문제 해결
( 를 만나면 스택에 push, ) 를 만났는데 스택이 비어있지 않으면 ( 를 pop 하는 방식으로 접근했다.
만약 스택이 비어있다면 괄호 밖에 있음을 의미하므로 출력해주면 된다.
입력 받은 문자열을 char형으로 변환해 한 글자 한 글자를 추출해준다.
for (char ch : str.toCharArray()) {
- ch가 '('인 경우, 스택에 push
- ch가 ')'인 경우, 스택이 비어있지 않고 스택의 최상단에 '('가 있을 경우, 스택에서 pop
- 그 외의 경우 (ch가 괄호가 아닌 문자), 스택이 비어있으면(즉, 괄호 밖의 문자라면) 해당 문자를 출력해주는 방식으로 동작하는 코드이다.
if (ch == '(') {
stack.push(ch);
} else if (ch == ')') {
if (!stack.isEmpty() && stack.peek() == '(') {
stack.pop();
}
} else {
if (stack.isEmpty()) {
System.out.print(ch);
}
}
최종 코드
import java.util.Scanner;
import java.util.Stack;
public class P02_괄호문자제거 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
Stack<Character> stack = new Stack<>();
// ( 를 만나면 스택에 push, )를 만났는데 스택이 비어있지 않으면 (를 pop,
// 스택이 비어있으면 (괄호 밖이므로) 출력
// (A(BC)D)EF(G(H)(IJ)K)LM(N)
for (char ch : str.toCharArray()) {
if (ch == '(') {
stack.push(ch);
} else if (ch == ')') {
if (!stack.isEmpty() && stack.peek() == '(') {
stack.pop();
}
} else {
if (stack.isEmpty()) {
System.out.print(ch);
}
}
}
System.out.println();
}
}
반응형
'알고리즘 문제풀이 입문: 코딩테스트 대비 > 섹션 5. Stack, Queue(자료구조)' 카테고리의 다른 글
공주 구하기 (1) | 2024.04.15 |
---|---|
쇠막대기 (0) | 2024.04.13 |
후위식 연산(postfix) (0) | 2024.04.12 |
크레인 인형 뽑기 (카카오) (0) | 2024.04.12 |
올바른 괄호 (0) | 2024.04.12 |