본문 바로가기

알고리즘 & 코딩 테스트

[프로그래머스] Lv.2 괄호 회전하기 해결 과정(Java)

 문제 설명

 https://school.programmers.co.kr/learn/courses/30/lessons/76502

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


우선 주어진 문자열이 올바른 괄호 문자열인지 체크하고, 한 칸씩 회전하는 과정을 반복하는 것이 핵심이기 때문에 substring() 메서드를 활용해서 문자열을 회전시켰습니다.

 그리고, Stack 자료구조를 사용하여 주어진 문자열이 올바른 괄호 문자열인지 확인했습니다. 그리고 스택이 비어있는지 확인하는 로직을 try - catch 블록 내부에서 체크해서 해결했습니다.

더보기
  • stack이 비어있을 때 pop() 연산을 수행하면 발생하는 EmptyStackException을 이용

채점 결과

 


 전체 코드

더보기
import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        
        for(int i = 0; i < s.length(); i++) {
            answer += check(s);
            s = s.substring(1) + s.substring(0, 1);
        }
        
        return answer;
    }
    
    private int check(String str) {
        Stack<Character> stack = new Stack<>();
        int index = 0;
        try {
            for(int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                switch(c) {
                    case ']':
                        if(stack.peek() != '[') return 0;
                        stack.pop(); break;
                    case '}':
                        if(stack.peek() != '{') return 0;
                        stack.pop(); break;
                    case ')': 
                        if(stack.peek() != '(') return 0;
                        stack.pop(); break;
                    default: stack.push(c); break;
                }
            }
        } catch(EmptyStackException e) {
            //스택이 비어있으면 0 반환
            return 0;
        }
        
        //모든 연산을 마치고 스택이 비어있으면 주어진 문자열이 
        //올바른 괄호 문자열이므로 1을 반환
        return stack.isEmpty() ? 1: 0;
    }
}

 정리

  • 스택이 비어있을 때, pop() 연산을 수행하면 EmptyStackException이 발생함.
300x250