본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 76502번: 괄호 회전하기 [Java]

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

 

프로그래머스

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

programmers.co.kr

1. 코드

import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        for(int i = 0; i < s.length(); i++) {
            Stack <String> stack = new Stack<>();
            for(String str : s.split("")) {
                if(stack.isEmpty())
                    stack.push(str);
                else if((str.equals("}") && stack.peek().equals("{")) || (str.equals(")") && stack.peek().equals("(")) || (str.equals("]") && stack.peek().equals("[")))
                    stack.pop();
                else stack.push(str);
            }
            if(stack.isEmpty())
                answer++;
            s = s.substring(1) + s.charAt(0);
        }
        return answer;
    }
}

2. 설명

스택을 이용하여 닫힌 괄호가 나올 때 그에 적합한 여는 괄호가 Stack의 peek() 결과인지 확인한 후 맞다면 pop을 해주며 아니라면 무시합니다. 여는 괄호가 나온다면 push를 진행합니다.

반복문이 종료되고 Stack이 비어있다면 answer의 값을 1증가시키고, 문자열의 첫번째 문자를 문자열의 제일 뒤로 이동시켜서 해당 작업을 문자열의 길이만큼 진행합니다.

3. 정리

  1. 괄호 문제는 Stack을 이용하면 쉽게 해결됩니다.
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges