본문 바로가기
카테고리 없음

[프로그래머스] 괄호 회전하기 [java]

by 근즈리얼 2021. 7. 6.
728x90

문제

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

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr


문제풀이

 

stack과 문자열 자르기를 잘 이용하면 쉽게 풀 수 있는 문제였다.

1. 이중 for문을 이용해 겉에 for문에서는 문자열에 맨 앞 문자를 옮긴다.

2. 안에서는 stack을 이용해 괄호를 완성시키면 지운다.

3. stack을 구현할 때 주의할 점은 스택의 peek()를 봤을 때 닫는 괄호가 있다면 더 이상 볼 필요 없이 break를 해주면 된다.

4. stack의 peek와 내가 지금 넣으려는 괄호가 서로 쌍이 맞으면 그때 stack에서 pop만 해주면 된다.

5. 안에 for문을 나왔을 때 stack의 size가 0이면 모든 괄호가 쌍이 맞는 것이므로 answer을 증가시켜주고 문자열의 맨 앞 문자를 제거하고 그 값을 문자열 맨 뒤에 붙여준 뒤 겉에 for문을 진행한다.

 

코드

import java.util.Stack;

public class rotate_bracket {
    public static void main(String[] args) {
        String s = "[](){}";
        rotate_bracket r = new rotate_bracket();
        System.out.println(r.solution(s));
    }
    public int solution(String s){
        int answer = 0;

        for(int i = 0; i<s.length();i++){
            Stack<Character> stack = new Stack<>();
            stack.add(s.charAt(0));
            for(int j = 1; j<s.length();j++){
                if(stack.isEmpty()){
                    stack.add(s.charAt(j));
                    continue;
                }if(stack.peek().equals(']') || stack.peek().equals('}') || stack.peek().equals(')')){
                    break;
                }else if(s.charAt(j) == ')' && stack.peek().equals('(')){
                    stack.pop();
                }else if(s.charAt(j) == '}' && stack.peek().equals('{')){
                    stack.pop();
                }else if(s.charAt(j) == ']' && stack.peek().equals('[')){
                    stack.pop();
                }else{
                    stack.add(s.charAt(j));
                }
            }
            if(stack.size() == 0){
                answer++;
            }
            char tmp = s.charAt(0);
            s = s.substring(1);
            s += tmp;
        }

        return answer;
    }
}
728x90

댓글