[D4] [S/W 문제해결 기본] 4일차 - 괄호 짝짓기 - 1218
성능 요약
메모리: 19,088 KB, 시간: 103 ms, 코드길이: 1,789 Bytes
제출 일자
2024-01-02 00:18
풀이 방법
1. 괄호를 체크하는 것
2. 앞 괄호와 뒤 괄호를 나누어준다.
3. 문자를 받아서 앞 괄호를 받는다면 스택에 넣어준다.
4. 뒤 괄호를 받는다면 스택에 마지막으로 넣은 괄호(peek)가 대칭 하는지 확인 후 아니라면 false를 리턴한다.
풀이 코드
import java.util.Stack;
import java.io.InputStreamReader;
import java.io.BufferedReader;
class Solution {
static char[] front = {'(','[','{','<'};
static char[] rear = {')',']','}','>'};
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
for(int tc = 1; tc <= 10; tc++) {
int len = Integer.parseInt(br.readLine());
String line = br.readLine();
sb.append("#" + tc + " " + (validText(len,line) ? "1" : "0")).append("\n");
}
System.out.println(sb);
}
private static boolean validText(int len, String text){
Stack<Character> stack = new Stack<>();
boolean isFront;
for(int i = 0 ; i < len; i++){
char ch = text.charAt(i);
isFront = true;
// 뒤 괄호인 경우 기존 스택의 앞에 있는지 확인한다.
for(int j = 0; j < 4; j++){
// 뒤에 있는 괄호를 발견한 경우
if(ch == rear[j]){
// 스택이 비어있거나 stack의 탑이 현재 앞 괄호와 다른 경우 숏컷으로 종료
if(stack.isEmpty() || stack.peek() != front[j]){
return false;
}
// 동일한 경우 빼준 뒤 Front가 아니라고 체크
else{
stack.pop();
isFront = false;
}
break;
}
}
// ch가 앞괄호라면 push해줌
if(isFront){
stack.push(ch);
}
}
// 모든 연산이 끝난 후 Stack가 비어있어야 올바른 경우
return stack.isEmpty();
}
}
출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do
'알고리즘 - SWEA > D4' 카테고리의 다른 글
[SW expert Academy] SWEA 1227번 미로2 자바(Java) (0) | 2024.01.02 |
---|---|
[SW expert Academy] SWEA 1219번 길찾기 자바(Java) (0) | 2024.01.02 |
[SW expert Academy] SWEA 1211번 Ladder2 자바(Java) (0) | 2023.12.30 |
[SW expert Academy] SWEA 7465번 창용 마을 무리의 개수 자바(Java) (0) | 2023.12.27 |
[SW expert Academy] SWEA 1868번 파핑파핑 지뢰찾기 자바(Java) (0) | 2023.11.18 |