-
BOJ) 균형잡힌 세상알고리즘/백준 2020. 6. 23. 21:34반응형
균형잡힌 세상
풀이
정규식을 활용하면 시간도 덜 들고 풀기 쉽지 않을까 싶어서 정규식을 활용했다.
replaceAll에 들어가는 부분인 "[^[]()]" 이 부분은 [ ] 안에 있는 문자들에 대해서 검사를 한다.
[ ] 안에 ^가 들어가 있다면 해당 문자를 제외한 모든 글자를 의미한다.
따라서, [ ^ [ ] ( ) ] ( 보기 좋기 위한 띄어쓰기는 양해 부탁드립니다..)는 괄호로 여닫는 문자가 아닌 문자들을 의미한다.
replaceAll을 수행하고 나면 띄어쓰기가 제거된 괄호만 남게 된다.
So when I die (the [first] I will see in (heaven) is a score list). => ([]())
([ (([( [ ] ) ( ) (( ))] )) ]). => ([(([([])()(())]))])
. => 빈 문자열
남은 문자열을 가지고 스택에 넣으면서, 올바르게 괄호가 열리고 닫혔는지 검증하기만하면 쉬운 문제였다.
Stack을 사용해서 속도나 메모리가 좋지는 않지만, 문제를 푸는데는 큰 문제가 없어서 다시 풀지는 않았다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class BalncedString_4949 { final static String YES = "yes", NO = "no", END = "."; final static char[] openBracket = {'[','('}, closeBracket = {']',')'}; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String inputStr =""; while(!(inputStr = br.readLine()).equals(END)) { inputStr = inputStr.replaceAll("[^\\[\\]\\(\\)]",""); Stack<Character> bracket = new Stack<>(); loop: for(int i=0; i<inputStr.length(); i++) { char ch = inputStr.charAt(i); if(ch == openBracket[0] || ch == openBracket[1]) { // open bracket.push(ch); } else if(ch == closeBracket[0]) { // ] if(bracket.empty()) { bracket.push(openBracket[0]); break loop; } else if(bracket.peek() == openBracket[0]){ bracket.pop(); } else { // (가 먼저 나옴 break loop; } } else { // ) if(bracket.empty()) { bracket.push(openBracket[1]); break loop; } else if(bracket.peek() == openBracket[1]){ bracket.pop(); } else { // [가 먼저 나옴 break loop; } } } if(bracket.size() ==0) { System.out.println(YES); } else { System.out.println(NO); } } } }
반응형'알고리즘 > 백준' 카테고리의 다른 글
BOJ) 카드 (0) 2020.06.24 BOJ) 랜선 자르기 (0) 2020.06.24 BOJ) 단어 정렬 (0) 2020.06.23 BOJ) 케이크 자르기 (0) 2020.06.23 BOJ) 수 이어 쓰기 2 (3) 2020.06.23