문제 : boj7585
괄호를 제외한 나머지 문자는 모두 쓸모없다. 예를들어 '예제 입력1'은 다음과 동일한 데이터이다.
이제 올바른 괄호쌍인지만 판단하면 되는데, 스택을 사용하면 간단하다.
1. 여는 괄호 (, {, [ 를 만날 시 스택에 해당 괄호를 넣는다.
2. 닫는 괄호 ), }, ] 를 만날 시 스택에서 하나를 pop한다. pop한 결과가 동일한 형태의 여는 괄호가 아닐 경우 (예를들어 ']'에서 pop을 하니 '('가 나온 경우) Illegal이다.
3. 최종적으로 1, 2의 과정을 문자열 끝까지 진행하고 스택에 남은게 아무것도 없다면 Legal, 뭐라도 남아있다면 쌍이 안맞는 것이니 Illegal이다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
private boolean isLegalBrackets(String s) {
Stack<Character> stk = new Stack<>();
for (int i = 0; i < s.length(); i++) {
switch (s.charAt(i)) {
case '(' : case '[' : case '{' : stk.push(s.charAt(i)); break;
case ')' : if (stk.pop() != '(') return false; break;
case ']' : if (stk.pop() != '[') return false; break;
case '}' : if (stk.pop() != '{') return false; break;
}
}
if (stk.isEmpty()) return true;
return false;
}
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while (true) {
String s = br.readLine();
if (s.equals("#")) break;
sb.append(isLegalBrackets(s) ? "Legal\n" : "Illegal\n");
}
System.out.print(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 2014 자바 - 소수의 곱 (BOJ 2014 JAVA) (0) | 2021.12.12 |
---|---|
백준 14413 자바 - Poklon (BOJ 14413 JAVA) (0) | 2021.12.11 |
백준 14382 자바 - 숫자세는 양 (Large) (BOJ 14382 JAVA) (0) | 2021.12.10 |
백준 1011 자바 - Fly me to the Alpha Centauri (BOJ 1011 JAVA) (0) | 2021.12.08 |
백준 14003 JAVA - 가장 긴 증가하는 부분 수열 5 (BOJ 14003 JAVA) (0) | 2021.12.08 |
댓글