Pccp 준비하기 - 6 stack을 활용해서 문제 풀어보기

박경현·2024년 2월 7일
0

프로그래머스에서 stack을 활용하는 문제인 괄호 관련 문제들을 풀었고
그와 관련된 내용 중 깨달은 내용들을 정리해보려고 한다

괄호 회전하기

괄호회전하기 문제 링크

이 문제는 {}(])이렇게 생긴 괄호나 혹은 {} 올바르게 생긴 괄호들을 돌려보면서 몇개나 올바른 괄호가 생기는지 count해주는 문제였다.

여기서 핵심은 어떻게 괄호를 rotate할것인가였는데 StringBuilder의 subString, delete, append 함수를 활용해 돌려주었다.

일단 substring(0,i) 이렇게 해서 그 만큼을 String 변수 substring에 저장합니다
그리고 delete(0,i)를 이용해서 0부터 i 전까지 삭제합니다
마지막으로 append(substring)을 해서 맨 뒤에 붙여줍니다

해답 코드

import java.util.*;
class Solution {
    // 한번씩 돌려보고 그 다음에 각각 올바른지 검사하기
    public int solution(String s) {
        int answer = 0;
        
        for (int i = 0; i < s.length(); i++) {
            StringBuilder sb = new StringBuilder(s);
            String subString = sb.substring(0,i);
            sb.delete(0,i);
            sb.append(subString);
            //System.out.println(sb.toString());
            if (rightString(sb.toString())) answer++;
        }
        
        return answer;
    }
    // [] {} ()
    private boolean rightString(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i <s.length(); i++) {
            char c = s.charAt(i);
            if (stack.isEmpty()) {
                if (c == ')' || c == '}' || c == ']') return false;
                else stack.push(c);
            } else {
                if (c == '(' || c == '{' || c =='[') stack.push(c);
                else {
                    if (stack.peek() == '(' && c == ')') stack.pop();
                    else if (stack.peek() == '{' && c == '}') stack.pop();
                    else if (stack.peek() == '[' && c == ']') stack.pop();
                    else return false;
                }
            }
        }
        if (!stack.isEmpty()) return false;
        return true;
    }
}
profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글