sm 기술 블로그

154. 4949(균형잡힌 세상) - 자바 본문

문제/백준_자바

154. 4949(균형잡힌 세상) - 자바

sm_hope 2022. 7. 22. 14:32
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