728x90
문제
알파벳과 소괄호, 대괄호로만 이루어진 문자열이 주어졌을 때
괄호가 알맞게 짝을 이루는지 여부를 출력하라
접근 방식
스택을 사용해서 풀 수 있는 대표적인 문제로
여는 괄호만 항상 스택에 넣어주고
닫는 괄호를 만났을 때 스택의 최상위와 비교하여
짝이 맞는지 확인하면 된다.
중간에 하나라도 짝이 맞지 않는 경우에는 반복문을 종료하고
"no"를 출력해주면 된다.
풀이
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while (true) {
String input = br.readLine();
if (input.equals(".")) {
break;
}
Stack<Character> stack =new Stack<>();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c == '(' || c == '[') {
stack.push(c);
} else if (c == ')') {
if (stack.isEmpty() || stack.peek() == '[') {
sb.append("no").append("\n");
break;
}
stack.pop();
} else if (c == ']') {
if (stack.isEmpty() || stack.peek() == '(') {
sb.append("no").append("\n");
break;
}
stack.pop();
} else if (c == '.') {
if (!stack.isEmpty()) {
sb.append("no").append("\n");
break;
}
sb.append("yes").append("\n");
}
}
}
System.out.println(sb);
}
}
'Java > Algorithms' 카테고리의 다른 글
[백준] 10799번 : 쇠막대기 (0) | 2023.10.07 |
---|---|
[백준] 3986번 : 좋은 단어 (0) | 2023.10.07 |
[백준] 5430번 : AC (1) | 2023.10.04 |
[백준] 1021번 : 회전하는 큐 (0) | 2023.10.04 |
[백준] 10866번 : 덱 (2) | 2023.10.03 |