728x90
반응형
안녕하세요 놀이방 사장입니다.
이번 포스팅은
백준 4949 "균형잡힌 세상" 문제입니다.
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
백준 9012번 괄호를 푸신 분이라면 쉽게 풀 수 있다고 생각합니다.
() 에서 []가 추가된 문제입니다.
([]) -> 이렇게 괄호가 딱 맞게 나와야 YES가 되괴
)[]( 이런식으로 나오면 "NO"가 출력되면 됩니다.
([)] 이렇게도 안됩니다. => "NO"가 출력되야함
이거 그대로 구현해주면 됩니다.
/*
백준 4949 균형잡힌 세상
스택사용
* */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Stack;
public class Main{
public static String getValue(String s){
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++){
char value = s.charAt(i);
if(value == '(' || value == '['){
stack.push(value);
}
if(value == ')'){
if(stack.isEmpty() || stack.peek() != '('){
return "no";
}else{
stack.pop();
}
}else if( value == ']'){
if(stack.isEmpty() || stack.peek() != '['){
return "no";
}else{
stack.pop();
}
}
}
if(stack.isEmpty()){
return "yes";
}else{
return "no";
}
}
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
String s = br.readLine();
if(s.equals(".")){
break;
}
System.out.println(getValue(s));
}
}
}
핵심 로직은 이 부분입니다.
for(int i=0; i<s.length(); i++){
char value = s.charAt(i);
if(value == '(' || value == '['){
stack.push(value);
}
if(value == ')'){
if(stack.isEmpty() || stack.peek() != '('){
return "no";
}else{
stack.pop();
}
}else if( value == ']'){
if(stack.isEmpty() || stack.peek() != '['){
return "no";
}else{
stack.pop();
}
}
}
일단 여는 괄호들은 다 스택에 넣어주면 됩니다.
이제 ) , ] 분기시켜줘야 합니다.
둘 다 먼저 스택이 비어있는지 확인해줘야합니다
전에도 말했듯이 스택에 값이 비어있으면 애초에 짝이 맞지 않기 때문에 NO를 출력해줘야해요
+ 조건을 하나 더 추가해야합니다.
위에서 말했듯이 ([)] 이렇게 되면 올바른 괄호가 아닙니다.
그래서 ) 일 떄는 스택에 마지막값이 ( 이 나와야해요
[ 도 마찬가지입니다.
여기서 더 궁금하신 점이 있으시면 댓글 남겨주세요
감사합니다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2217] 로프 - JAVA (3) | 2024.01.14 |
---|---|
[백준 1620] 나는야 포켓몬 마스터 이다솜 - JAVA [HashMap 사용] (1) | 2024.01.14 |
[백준 1764] 듣보잡 - JAVA [HashMap 사용] (0) | 2024.01.14 |
[백준 9012]- 괄호- JAVA [스택 구현] (0) | 2024.01.14 |
[백준 10816] 숫자카드2 - JAVA[이중 for문, 이분탐색, 자료구조 : 해시맵, Counting] 기법 (0) | 2024.01.14 |