sm 기술 블로그
154. 4949(균형잡힌 세상) - 자바 본문
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while (true) {
String[] S = br.readLine().split("");
Stack<String> stack = new Stack<>();
if(S[0].equals(".")) {
break;
}
for (int i = 0; i < S.length; i++) {
if (S[i].equals("(") || S[i].equals("[")) {
stack.add(S[i]);
}
else if (S[i].equals(")")) {
if (stack.size() != 0 && (stack.get(stack.size()-1).equals("("))) {
stack.pop();
}
else {
stack.add("1");
break;
}
}
else if (S[i].equals("]")) {
if (stack.size() != 0 && (stack.get(stack.size()-1).equals("["))) {
stack.pop();
}
else {
stack.add("1");
break;
}
}
}
if(stack.size() == 0) {
sb.append("yes").append("\n");
}
else {
sb.append("no").append("\n");
}
}
System.out.print(sb);
}
}
문제요약
문자 형식이 맞는지 확인하고 맞으면 yes 틀리면 no를 출력하라.
설명
stack을 이용하면 쉽게 풀 수 있다.
if(S[0].equals(".")) {
break;
}
조건중에 . 이 들어온다면 프로그램을 종료한다.
if (S[i].equals("(") || S[i].equals("[")) {
stack.add(S[i]);
}
값이 만약 [ 혹은 ( 라면 그 값은 스택에 저장한다.
else if (S[i].equals("]")) {
if (stack.size() != 0 && (stack.get(stack.size()-1).equals("["))) {
stack.pop();
}
else {
stack.add("1");
break;
}
}
만약 ']' 인 경우 스택이 비어 있지 않고 스택에 맨 마지막이 '[' 일 경우 pop을 통해 꺼낸다.
위에 해당되지 않는 경우에는 1을 집어 넣는다.
else if (S[i].equals(")")) {
if (stack.size() != 0 && (stack.get(stack.size()-1).equals("("))) {
stack.pop();
}
else {
stack.add("1");
break;
}
}
만약 ')' 인 경우 스택이 비어있지 않고 스택에 맨 마지막이 '('일 경우 pop을 통해 꺼낸다.
위에 해당되지 않는 경우에는 1을 집어 넣는다.
if(stack.size() == 0) {
sb.append("yes").append("\n");
}
else {
sb.append("no").append("\n");
}
스택이 비어있다는 것은 완벽한 문자열이라는 뜻으로 yes를 출력한다.
만약 그렇지 않으면 no를 출력한다.
'문제 > 백준_자바' 카테고리의 다른 글
156. 17298(오큰수) - 자바 (0) | 2022.07.25 |
---|---|
155. 1874(스택 수열) - 자바 (0) | 2022.07.22 |
153. 9012(괄호) - 자바 (0) | 2022.07.21 |
151. 10828(스택) - 자바 (0) | 2022.07.20 |
150. 13305(주유소) - 자바 (0) | 2022.07.19 |
Comments