[JAVA] 34. 올바른 괄호 - stack

2021. 10. 24. 11:19
728x90

설명

괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.

(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.

입력

첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.

출력

첫 번째 줄에 YES, NO를 출력한다.

예시 입력 1 

(()(()))(()

예시 출력 1

NO

 

 


 

내 풀이 - 괄호의 갯수만 비교하면 된다고 생각함 => ex) )(())(  괄호의 갯수는 맞지만 알맞은 괄호 x

 

import java.util.*;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);

    String str = in.next();
        String answer = "NO";
        HashMap<Character,Integer> map = new HashMap<>();

        for(char ch : str.toCharArray()){
            map.put(ch, map.getOrDefault(ch,0)+1);
        }
        if(map.get('(')==map.get(')')){
            answer = "YES";
        }

        System.out.println(answer);
  }
}

 

 

 

다른 풀이

 

import java.util.*;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    
    	String str = in.next();
        String answer = "YES";
        Stack<Character> stack = new Stack<>();

        for(char ch : str.toCharArray()){
            if(ch == '('){
                stack.push(ch);
            }else{
                if(stack.isEmpty()){ // 닫는 괄호가 더 많을 때
                    answer = "NO";
                    break;
                }
                stack.pop();

            }
        }
        // 여는 괄호가 더 많을 때
        if(!stack.isEmpty()){
            answer = "NO";
        }

        System.out.println(answer);
  }
}

 

 

STACK 

 

값을 넣을 때는 push

값을 뺄 때는 pop

isEmpty();

728x90

BELATED ARTICLES

more