728x90
코드 힌트:
- 입력 처리
- 사용자는 여러 줄의 문자열을 입력합니다. 입력된 문자열이 .으로 시작하지 않을 때까지 반복적으로 처리합니다.
- input.replaceAll("[a-zA-Z.]*", "")와 input.replaceAll("\\s++", "")를 통해 괄호 외의 문자와 공백을 제거한 후 문자열을 처리합니다.
- 스택을 이용한 괄호 짝 검사
- 각 문자열을 순회하며 열린 괄호 ( 또는 [는 스택에 추가합니다.
- 닫힌 괄호 ) 또는 ]를 만날 경우, 스택의 최상단에 있는 열린 괄호와 짝이 맞는지 확인합니다.
- 짝이 맞으면 스택에서 제거하고, 그렇지 않으면 isAble을 false로 설정해 잘못된 괄호 짝임을 표시합니다.
- 결과 출력
- 문자열 순회가 끝난 후, isAble이 true이고 스택이 비어있으면 괄호가 올바르게 닫혔으므로 "yes"를 출력합니다.
- 그렇지 않으면 "no"를 출력합니다.
- 반복 처리
- 입력된 문자열이 .으로 시작하지 않으면 계속해서 입력을 받고, 위의 과정이 반복됩니다.
정답은 더보기 클릭
더보기
더보기
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String input = in.nextLine(); // 입력된 문자열을 한 줄 받아옴
Stack<Character> stk = new Stack<>(); // 괄호의 짝을 확인하기 위한 스택 생성
// 입력이 '.'으로 시작하지 않을 때까지 반복
while (input.charAt(0) != '.') {
boolean isAble = true; // 괄호가 올바른지 여부를 저장하는 변수
stk.clear(); // 이전 입력에 대한 스택을 초기화
input = input.replaceAll("[a-zA-Z.]*", ""); // 괄호 외의 모든 문자를 제거
input = input.replaceAll("\\s++", ""); // 모든 공백을 제거
// 입력된 문자열을 순회하며 괄호 검사
for (char c : input.toCharArray()) {
// 스택이 비어 있거나, 열린 괄호를 만나면 스택에 추가
if (stk.isEmpty() || c == '(' || c == '[') {
stk.add(c); // 열린 괄호를 스택에 추가
}
// 스택의 최상단 괄호가 열리고, 짝이 맞는 닫힌 괄호를 만나면 스택에서 제거
else if ((stk.peek() == '(' && c == ')') || (stk.peek() == '[' && c == ']')) {
stk.pop(); // 괄호 짝을 맞추면 스택에서 제거
}
// 짝이 맞지 않는 경우, 올바르지 않은 괄호임을 표시하고 반복 종료
else {
isAble = false;
break; // 짝이 맞지 않으므로 더 이상 확인하지 않고 종료
}
}
// 스택이 비어있고 모든 괄호가 올바르게 닫혔으면 'yes', 그렇지 않으면 'no' 출력
if (isAble && stk.isEmpty())
System.out.println("yes");
else
System.out.println("no");
input = in.nextLine(); // 다음 입력을 받아옴
}
}
}
728x90
'백준' 카테고리의 다른 글
[백준] 뱀과 사다리 게임 (16928번) (2) | 2024.10.07 |
---|---|
[백준] 감소하는 수 (1038번) (0) | 2024.10.01 |
[백준] 보물 (1026번) (0) | 2024.09.20 |
[백준] 별 찍기 - 8 (0) | 2024.09.19 |
[백준] 북극곰은 괄호를 찢어 (25918번) (1) | 2024.09.13 |