https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
[접근]
이 문제는 9012번 문제와 살짝 비슷하다. (https://www.acmicpc.net/problem/9012) 이 문제와 다른점이 있다면 이번 문제에는 괄호의 종류가 늘었다는 것이다. 즉 신경써줘야 할 점이 생긴것이다.
1) ' ( [ ) ] ' 이와 같이 괄호가 성립이 안되는 문장이면 안된다.
-> '(' or '[' 는 오는 순서대로 저장시킨다. ')' or ']' 를 만나면 스택의 가장 위에 있는 문자와 비교하여 괄호의 짝이 맞는지 비교해야한다.
2 ) ' . ' 이 있는 문장도 옳은 문장이다.
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main4949 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
StringBuilder sb = new StringBuilder();
while (true){
int index=0; // stack 위치를 저장하기 위한 변수
char [] stack = new char[100];
str = br.readLine();
if (str.equals(".")){ // "." 입력의 끝
break;
}
for (Byte b : str.getBytes()){
if(b == '('){
stack[index] =')';
index++;
}else if(b == '['){
stack[index] = ']';
index++;
}
else if (b == ')'|| b==']'){
if (index > 0 && stack[index-1]==b){
index--; //pop
}else{
index=-1;
break;
}
}
}
if (index ==0){
sb.append("yes\n");
}else {
sb.append("no\n");
}
}
System.out.print(sb);
}
}
'Baekjoon' 카테고리의 다른 글
[Java] 백준 2751번 : 수 정렬하기 2 (0) | 2022.01.15 |
---|---|
[Java] 백준 10816번 : 숫자 카드 2 (0) | 2022.01.15 |
[Java] 백준 1874번 : 스택 수열 (0) | 2022.01.15 |
[Java] 백준 10828번 : 스택 (0) | 2022.01.14 |
[Java] 백준 9012번 : 괄호 (0) | 2022.01.14 |