Algorithm

[Algorithm/Java] 알고리즘 자바 올바른 괄호 (코딩테스트, Stack, Queue, 스택, 큐, 자료구조, 기본 스택 활용법)

권락현 2022. 4. 13. 22:51


1. 문제 설명

  • 설명
    괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
    (())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
  • 입력
    첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
  • 출력
    첫 번째 줄에 YES, NO를 출력한다.
 

 

2. 문제 코드 및 풀이 설명

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

public class CorrectBracket {
  public static void main(String[] args) {
    CorrectBracket T = new CorrectBracket();
    Scanner kb = new Scanner(System.in);
    String str = kb.next();
    System.out.println(T.solution(str));
  }

  // 해결방법
  // 기본적인 스택 활용
  // '(' 가 나오면 스택 추가 ')'가 나오면 스택 제거
  // 만약 스택이 없다면 NO 리턴, 문자열을 모두 읽었는데 스택이 남았다면 NO 리턴
 public String solution(String str){
    String answer = "YES";
    // 스택 생성
    Stack<Character> stack = new Stack<>();
    // 문자를 하나씩 검사하며 스택 추가 및 삭제
    for (char x : str.toCharArray()) {
      if(x=='(') stack.push(x); // '('인 경우 스택 추가
      else{ // ')'인 경우 스택 빼주고 남은 스택이 없으면 NO 리턴
        if(stack.isEmpty()) return "NO";
        stack.pop();
      }
    }
    if(!stack.isEmpty()) return "NO"; // 모든 문자를 다 검사했는데 스택이 남았으면 NO 리턴
    return answer;
  }
}

 

3. 출력 예시

입력
(()(()))(()

출력
NO

 

 


위의 내용은 인프런에서 수강할 수 있는 김태원님의 자바 알고리즘 문제풀이 강의를 바탕으로 공부한 내용을 정리한 내용입니다!

https://inf.run/iAi6

 

자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 - 인프런 | 강의

자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성

www.inflearn.com