728x90
문자열 처리 중 괄호 쌍 체크의 가장 핵심은 stack의 사용이다.
- string 길이만큼 반복문을 돌며 각 자리에 있는 character를 체크한다.
- 여는 괄호 ' ( ' 가 나오는 경우
- stack에 push 한다.
- 닫힌 괄호 ' ) ' 가 나오는 경우
- stack이 비어있으면 NO 반환
- stack이 비어있지 않다면 stack에서 괄호 하나를 pop 한다.
- 여는 괄호 ' ( ' 가 나오는 경우
- 반복문 종료 후 stack에 괄호가 남아있다면 NO 반환
- 그렇지 않다면 YES 반환
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
static String isCorrect(String str)
{
Stack<Character> stack = new Stack<>();
for(int i = 0;i < str.length();i++)
{
char c = str.charAt(i);
//열린 괄호
if(c == '(')
stack.push(c);
//닫힌 괄호
else
{
if(stack.isEmpty())
return "NO";
else
stack.pop();
}
}
if(!stack.isEmpty())
return "NO";
return "YES";
}
public static void main(String[] args) {
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for(int i = 0;i < N;i++)
{
String str = br.readLine();
System.out.println(isCorrect(str));
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
728x90
'Algorithm > 문제 풀이' 카테고리의 다른 글
[알고리즘] 문자열 폭발 (백준 9935번) (0) | 2020.08.26 |
---|---|
[알고리즘] 팰린드롬? (백준 10942번) (0) | 2020.08.25 |
[알고리즘] 잃어버린 괄호 (백준 1541번) (0) | 2020.08.24 |
[알고리즘] 체스판 하얀 칸 (백준 1100번) (0) | 2020.08.24 |
[알고리즘] 크로아티아 알파벳 (백준 2941번) (0) | 2020.08.24 |
댓글