728x90
❓ 균형잡힌 세상
🏷️ 관련 주제 : Stack

💦 나의 시도
스택(Stack)을 이용한 방법
괄호를 매칭하는 것은 한 글자씩 읽을 때,
현재의 괄호와 이전에서 맨 마지막에 나온 괄호와 매칭을 하므로
LIFO 원칙을 따름
따라서 스택(Stack)을 이용하는 것이 적합하다고 판단
- 여는 괄호(
(
,[
)는 스택에 추가 (push()
) - 닫는 괄호(
)
,]
)는 스택의 맨 위 원소와 비교하여- 쌍이 매칭이 되면(
(
:)
/[
:]
),pop()
- 그렇지 않으면,
no
- 쌍이 매칭이 되면(
- 마침표(.)가 나왔을 때,
- 스택이 비어있지 않으면,
no
- 비어있으면,
yes
- 스택이 비어있지 않으면,
❌ 틀렸습니다.
처음에 LIFO 원칙을 따르는 것을 착각하여 큐(Queue)를 잘못 사용하였는데
코드를 읽어보고 스택으로 수정하여 제출 성공하였습니다.
📑제출 기록 및 오답 원인

💯 해결 방법
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Character> stack = new Stack<>();
while (true) {
String input = br.readLine();
if (input.equals(".")) {
bw.close();
break;
}
for (char c : input.toCharArray()) {
if (c == '(' || c == '[') {
stack.push(c);
} else if (c == ')') {
if (stack.isEmpty() || stack.peek() != '(') {
bw.write("no\n");
stack.clear();
break;
}
stack.pop();
} else if (c == ']') {
if (stack.isEmpty() || stack.peek() != '[') {
bw.write("no\n");
stack.clear();
break;
}
stack.pop();
} else if (c == '.') {
if (!stack.isEmpty()) {
bw.write("no\n");
stack.clear();
break;
}
bw.write("yes\n");
stack.clear();
}
}
}
}
}
728x90