알고리즘/SWEA
[JAVA][SW Expert Academy] 1218. 괄호 짝짓기
minddi
2022. 8. 19. 01:49
[SW Expert Academy] 1218. 괄호 짝짓기
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14eWb6AAkCFAYD
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제 내용
4 종류의 괄호문자들 '()', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다. 이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 프로그램을 작성한다. 예를 들어 아래와 같은 문자열은 유효하다고 판단할 수 있다. ![]() 아래와 같은 문자열은 유효하지 않은 문자열이다. 붉은색으로 표시된 괄호의 짝을 찾을 수 없기 때문이다. ![]() 아래 문자열은 열고 닫는 괄호의 개수는 유효하나 짝이 맞지 않는 괄호가 사용 되었기 때문에 유효하지 않다. ![]() [입력] 각 테스트 케이스의 첫 번째 줄에는 테스트케이스의 길이가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다. 총 10개의 테스트케이스가 주어진다. [출력] #부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 유효성 여부를 1 또는 0으로 표시한다 (1 - 유효함, 0 - 유효하지 않음). |
해결 순서
1. Stack 클래스 사용
2. 스택이 비어있을 때 입력값이 닫힌 괄호이면? 0 : 열린괄호는 push
3. 스택이 비어있지 않을 때 입력값이 닫힌 괄호이면? 짝이 맞는지 확인 : 열린괄호는 push
> 짝 확인 => stack.pop == 입력값? 1 : 0
문제 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import java.util.Stack;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Solution
{
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = 10;
for(int test_case = 1; test_case <= T; test_case++)
{
int len = Integer.parseInt(br.readLine());;
String s = br.readLine();
Stack<Character> stack = new Stack<>();
int flag = 0;
for (int i = 0; i < len; i++) {
char c = s.charAt(i);
if (stack.isEmpty()) { // 스택이 비어있으면
if (isClosed(c)) { // 닫힌 괄호 여부 확인
flag = 0;
break;
} else {
stack.push(c);
flag = 1;
}
} else { // 스택이 비어있지 않으면
if (isClosed(c)) { // 닫힌 괄호 여부 확인
if (isEquals(stack.pop(), c)) { // 짝 일치 여부
flag = 1;
} else {
flag = 0;
break;
}
} else {
stack.push(c);
flag = 1;
}
}
}
System.out.println("#" + test_case + " " + flag);
}
}
public static boolean isClosed(char c) { // 닫힌 괄호 여부 확인
if (c == ')' || c == ']' || c == '}' || c == '>') {
return true;
} else {
return false;
}
}
public static boolean isEquals(char c1, char c2) { // 짝 일치 여부 확인
if ((c1 == '(' && c2 == ')') || (c1 == '[' && c2 == ']')
|| (c1 == '{' && c2 == '}') || (c1 == '<' && c2 == '>')) {
return true;
} else {
return false;
}
}
}
|
cs |