백준
백준 4949: 균형잡힌 세상(java)
unhyepnhj
2024. 7. 12. 21:11
문제

풀이
BufferedReader로 입력받은 값을 toCharArray() 메소드를 이용해 문자 배열 inputChar에 저장하고, inputChar의 길이가 1이고 inputChar[0]이 '.'이면 전체 반복을 종료하도록 한다.
그 외의 경우, 입력 문자가 왼쪽 괄호('(', '[')이면 스택에 입력값을 push하고, 오른쪽 괄호(')', ']')이면 pop한 값과 비교해 옳은 입력인지 판단한다.
- 왼쪽 괄호의 개수와 오른쪽 괄호의 개수가 동일한지(stack.empty())
- 방금 입력된 괄호가 스택에 가장 최근에 삽입된 괄호와 쌍이 맞는지
만 검사하면 되므로, 괄호가 아닌 문자에 대해서는 따로 연산할 필요가 없다.
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 in=new BufferedReader(new InputStreamReader(System.in));
while(true) {
char[] inputChar=in.readLine().toCharArray();
if(inputChar.length==1 && inputChar[0]=='.')
return;
Stack<Character> stack=new Stack<>();
boolean isBalanced=true;
for(int i=0; i<inputChar.length; i++) {
char ch=inputChar[i];
switch(ch) {
case '(': case '[':
stack.push(ch);
break;
case ')':
if(stack.empty() || stack.pop()!='(')
isBalanced=false;
break;
case ']':
if(stack.empty() || stack.pop()!='[')
isBalanced=false;
break;
}
if(!isBalanced) break;
}//end of for
if(!stack.empty())
isBalanced=false;
if(isBalanced)
System.out.println("yes");
else
System.out.println("no");
}
}
}
기타 참고
https://sysouthelloworld.tistory.com/98
스택의 응용: 괄호 검사 문제
괄호가 올바르게 사용되었는지 스택을 사용하여 검사한다. 괄호의 검사 조건은 아래와 같다.조건 1: 왼쪽 괄호의 개수와 오른쪽 괄호의 개수가 동일조건 2: 같은 종류의 괄호에서 왼쪽 괄호는
sysouthelloworld.tistory.com
위 글에서는 C언어로 구현했지만 원리 자체는 동일하다.