본문 바로가기
java

[java] 백준 4949 균형잡힌 세상

by MiaCoder 2024. 2. 13.

이번 문제는 stack를 활용하여 괄호 짝을 찾는 문제이다.

 

하지만 이번 문제와는 다르게 소괄호 () 와 대괄호 []가 모두 들어가 있다.

 

따라서 if문 처리가 조금 복잡하다.

 

특히 ')'가 나온 뒤 '('가 나오는 등 순서도 신경써야하는 것이 헷갈렸다.

 

하지만 boolean변수를 하나 추가하여 해결했다.

 

코드를 통해 설명하겠다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.security.Identity;
import java.util.Stack;

public class Main {

	public static void main(String[] args) throws Exception{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		while(true) {
			//입력되는 여러 줄을 읽기위한 반복문
            
			String line = br.readLine();
            // 입력값을 읽어들임
            
			Stack<Character> stack = new Stack<>();
            // Stack선언
            
			boolean isValid = true;
            //')'과 ']'이 먼저 입력되었을 때, 올바르지 않은것을 처리하기 위한 변수
			
			if(line.equals(".")) {
				
				break;
                //"."이 입려되면 반목문을 중단
				
			}
			
			for(int i = 0; i < line.length(); i++) {
				//문장 내 글자를 하나하나 읽기위한 반목분
                
				char c = line.charAt(i);
                //c는 문자열의 i번째 문자
				
				if(c == '(' || c == '[') {
					stack.push(c);	
                    //우선 'c', '['가 입력되면 stack에 저장
                    
				}
				else if(c == ')' && !stack.isEmpty() && stack.peek() == '(') {
					stack.pop();
                    // ')'이 stack가 비어있지 않으면서 stack의 가장 윗값이 '('라면 
                    //stack의 맨 윗요소 제거
				}
				else if(c == ']' && !stack.isEmpty() && stack.peek() == '[') {
					stack.pop();
                     // ']'이 stack가 비어있지 않으면서 stack의 가장 윗값이 '['라면 
                    //stack의 맨 윗요소 제거
				}
				else if(c == ')' || c == ']') {
                	//stack에 '(', '['가 저장되어 있지 않으면 참된 문장이 아니므로 
                    
					isValid = false;
                    //isValid를 false처리
                    
					break;
				}
				
				
			
			}
			
			if(stack.isEmpty() && isValid == true) {
				System.out.println("yes");
                //정상적인 문장이라면 소괄호, 대괄호의 짝이 맞아 스택이 비었을 것으며, 
                //')', ']'으로 시작하지 않으므로 isValid가 true일 것이다.
			}
			else {
				System.out.println("no");

			}
		}
	}
	

}

 

 

'java' 카테고리의 다른 글

[java]백준 9012 괄호  (0) 2024.01.31
[java] 백준 10773 제로  (0) 2024.01.31
[java] 백준 28278 스택2  (0) 2024.01.31
[java] 백준 13909 창문 닫기  (1) 2024.01.29
[java] 17103 골드바흐 파티션  (0) 2024.01.29