[백준 JAVA] 4949번 풀이 - 균형잡힌 세상
by mini_min
* - 어떤 문자열이 주어질 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짠다.
* 소괄호 () 와 대괄호 []로 괄호 종류는 2가지 이다.
* 조건 : 모든 괄화들은 각각의 괄호들과 짝을 이뤄야한다.
* 오른쪽 괄호는 짝을 이룰 왼쪽 괄호가 존재한다.
* 괄호들은 1:1 매칭만 가능하다.
* 짝을 이루는 두 괄호가 있을 때, 그 사이 문자열도 균형이 잡혀야한다.
* 각 문자열은 마지막 글자 제외하고 영문 알파벳, 공백, 소괄호, 대괄호로 이뤄진다.
* 온점(.)으로 끝나야하고, 길이는 100글자보다 작거나 같다.
* 입력 종료 조건으로 맨 마지막에 온점 하나가 들어온다.
입력 예제
* So when I die (the [first] I will see in (heaven) is a score list).
* [ first in ] ( first out ).
* Half Moon tonight (At least it is better than no Moon at all].
* A rope may form )( a trail in a maze.
* Help( I[m being held prisoner in a fortune cookie factory)].
* ([ (([( [ ] ) ( ) (( ))] )) ]).
package quiz;
import java.io.*;
import java.util.Stack;
public class _4949 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Character> stack = new Stack<>();
while(true){
stack.clear();
String words = br.readLine();
if(words.equals(".")){
break;
}
for(int i=0; i<words.length(); i++){
char temp = words.charAt(i);
if(temp =='(' || temp =='['){
stack.push(temp);
} else if(temp==')' || temp ==']') {
if(stack.isEmpty() || (stack.peek() == '(' && temp == ']') || (stack.peek()=='[' && temp==')') ){
stack.push(temp);
break;
}
stack.pop();
}
}
if(!stack.isEmpty()){
bw.write("no"+"\n");
} else {
bw.write("yes"+"\n");
}
bw.flush();
}
bw.close();
}
}
풀이
(, [ 로 시작하는 경우, stack 에 정상적으로 넣는다.
), ] 가 걸리는 경우, (1) (, [ 가 stack 에 저장되어 있는지, (2) 소괄호와 대괄호가 짝으로 들어가는지 체크해야한다.
이상 없는 경우 소괄호와 대괄호가 짝을 이루면 pop 해서 stack 안에 값을 뺀다.
stack 이 empty 인 경우 yes / 아닐 경우 no 를 출력한다.
'매일매일 알고리즘 공부' 카테고리의 다른 글
[백준 JAVA] 18870번 풀이 - 좌표 압축 🐾 (0) | 2023.10.16 |
---|---|
[백준 JAVA] 12789번 풀이 - 도키도키 간식드리미 (0) | 2023.10.12 |
[백준 JAVA] 28278번 풀이 - 스택2 (0) | 2023.10.06 |
[백준 JAVA] 9012번 풀이 - 괄호 (✨✨✨) (0) | 2023.10.05 |
[백준 JAVA] 17103번 풀이 - 골드바흐 파티션 (골드바흐의 추측) (1) | 2023.09.25 |
블로그의 정보
개발자 미니민의 개발로그
mini_min