-
백준 9012 - 괄호자료구조와 알고리즘/문제풀기 2023. 4. 4. 20:19
괄호가 짝이 맞는지 찾는 문제이다.
-해결방법
1. 괄호는 ()형태만 가능하다.
2. (만 저장했다가 )가 나오면 삭제 이때 닫는괄호)가 먼저나오면 ->불완전한 괄호
3 입력받은 모든 문자열이 검사가 끝났을 때, 저장된 것이 없다면 -> 완벽한 괄호
(가 남아 있다면 -> 불완전한 괄호
풀이1
public class Main{ public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int t = Integer.valueOf(br.readLine()); String input; while(t-->0){ input = br.readLine(); bw.write(vos(input)+"\n"); } bw.flush(); bw.close(); } private static String vos(String input) { Stack s = new Stack<>(); for(char a: input.toCharArray()){ if(a == ')'){ try{ s.pop(); }catch(Exception e){ return "NO"; } } else s.push(a); } if(s.empty()) return "YES"; else return "NO"; } }
배운점
- 스택 이용하기
- 백준에서 출력 값 대소문자 강력구분한다는 점 !! -> 너무 빨리 틀렸습니다 뜨면 거의 입출력 실수
- 중첩 반복문 구조에서 내부 반복문을 break하면서, 외부 반복문을 continue해야하는 너낌을 줘야할 때
따로 메서드로 빼서 값을 return해주는 방법을 생각해보자..
while(t-- > 0){ input = br.readLine(); error = false; for(char a : input.toCharArray()){ if(a == ')') { try{ Sstack.pop(); }catch (EmptyStackException e){ // 내부반복문 종료, 새로운 입력받아야함(외부 컨티뉴) bw.write("NO\n"); error = true; break;} } else Sstack.push(a); } //error값이 없으면 내부반복문 종료되면서 내부반복문이 모두 종료된 후에 실행해야하는 문장을 실행함 if(!error && Sstack.empty()) bw.write("YES\n"); if(!error && !Sstack.empty()) bw.write("NO\n"); Sstack.clear(); }
물론 반복문 안에서 어떤 플래그 값을 이용해서 구분해서 할 수 도 있긴하다!
'자료구조와 알고리즘 > 문제풀기' 카테고리의 다른 글
백준 10845 - 큐 구현 (0) 2023.04.05 백준 1406 - 에디터 (0) 2023.04.05 백준 1874 - 스택수열 (0) 2023.04.04 백준 9093 - 단어뒤집기 (0) 2023.04.04 백준 10828 - 스택 구현 (0) 2023.04.04