-
[백준/BOJ] 9012번 : 괄호 (JAVA / 자바)백준 2022. 3. 1. 21:58
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/9012
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
https://comain.tistory.com/266
위 문제랑 비슷하다. 오히려 쉽다. 위 문제는 소괄호와 대괄호를 사용했기에 조건이 좀 더 추가되었지만, 이번 문제는 소괄호만 써서 더 쉽다.
여는 괄호("(")가 오면 스택에 저장한다. 닫는 괄호(")")가 왔을때 스택이 비어있는지만 보면 된다. 비어있다면 여는 괄호가 없다는 것이기 때문에 설립하지 않는다. 그렇다면 닫는괄호를 스택에 저장하고, 반복을 종료한다.
스택이 비어있지 않다면, 여는 괄호가 들어있는 것이기 때문에 스택에서 하나 빼준다.
그렇게 반복문이 끝나고, 스택에 저장된 값이 없다면 올바른 괄호 문자열이 되는 것이고, 저장된 값이 있다면 올바른 괄호 문자열이 되지 않는것이다.
코드를 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for(int i = 0; i < T; i++) { String S = br.readLine(); //문자열의 각 자리의 값을 확인할때는 char형태로 바꿔서 확인하기 때문에 스택도 Character형으로 해준다. Stack<Character> stack = new Stack<Character>(); for(int j = 0; j < S.length(); j++) { if(S.charAt(j) == '(') { stack.push(S.charAt(j)); }else { //비어있는지를 먼저 본다. if(stack.empty()) { stack.push(S.charAt(j)); break; }else { stack.pop(); } } } if(stack.empty()) System.out.println("YES"); else System.out.println("NO"); } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 10816번 : 숫자 카드 2 (JAVA / 자바) (0) 2022.03.03 [백준/BOJ] 10773번 : 제로 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 7568번 : 덩치 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 4949번 : 균형잡힌 세상 (JAVA / 자바) (0) 2022.03.01 [백준/BOJ] 2869번 : 달팽이는 올라가고 싶다 (JAVA / 자바) (0) 2022.03.01