Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

올바른 괄호(Stack) 본문

알고리즘

올바른 괄호(Stack)

ultra_dev 2023. 3. 30. 00:58

올바른 괄호

설명

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

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

입력

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

출력

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

예시 입력 1

(()(()))(()

예시 출력 1

NO

📌스택 LIFO 구덩이 / push, pop // 대괄호든 소괄호든 그런 문제들은 거의 스택 쓰면 해결

isEmpty() 스택 비어있으면 true 아니면 false

📌Character….toCharArray….

여는 괄호면 그냥 push로 넣고!!

닫는 괄호면 앞에가 비어있으면 No!

안비어있으면 pop!

이 과정이 끝났는데도 스택에 남아있으면 NO~!

📌큐 FIFO 원통 (큣대 생각 일직선)

import java.util.Scanner;
import java.util.Stack;

class Main {

  public String solution(String str) {
    String answer = "YES";
    Stack<Character> stack = new Stack<>();
    //String str은 그대로 있고 str기반으로 한 배열이 추가로 만들어지는 거지
    for (char x : str.toCharArray()) {
      //닫는 괄호가 많은 상황, char니까 ""아니고 ''임 ㅡ!!!!!
      //x가 여는 괄호라면 그냥 넣고~
      if (x == '(') {
        stack.push(x);
      } else { //이제 x가 닫는 괄호라면
        if (stack.isEmpty()) { //그리고 앞에가 비어있으면
          return "NO"; //당연히 안되는 것!
        }
//닫는 괄호 일때 앞에가 안비어있으면 pop하는거지~!
				stack.pop();
      }

    }
    if (!stack.isEmpty()) { //위에 for문이 끝났는데도 stack이 남아있다면
      return "NO";
    }
    return answer;
  }

  public static void main(String[] args) {
    Main T = new Main();
    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    System.out.println(T.solution(str));
  }
}

'알고리즘' 카테고리의 다른 글

크레인 인형 뽑기(Stack)  (0) 2023.03.31
괄호문자제거(Stack)  (0) 2023.03.30
K번째 큰 수 (TreeSet)  (0) 2023.03.29
매출액의 종류  (0) 2023.03.29
아나그램(해쉬)  (0) 2023.03.27
Comments