괄호 회전하기 | 프로그래머스

Bluewave·2024년 8월 12일

코테공부_java

목록 보기
50/99
post-thumbnail

문제

🩶 문제 바로가기

문제레벨정답률
괄호 회전하기Lv.267%

My Code

import java.util.Stack;

class Solution {
    public int solution(String s) {
        int length = s.length();
        int result = 0;

        for (int i = 0; i < length; i++) {
            if (isValid(s)) {
                result++;
            }
            // 회전
            s = rotateLeft(s);
        }

        return result;
    }

    private boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        
        for (char ch : s.toCharArray()) {
            if (ch == '[' || ch == '(' || ch == '{') {
                stack.push(ch);
            } else {
                if (stack.isEmpty()) {
                    return false;
                }
                char top = stack.pop();
                if (!isMatchingPair(top, ch)) {
                    return false;
                }
            }
        }
        
        return stack.isEmpty();
    }

    private boolean isMatchingPair(char open, char close) {
        return (open == '[' && close == ']') ||
               (open == '(' && close == ')') ||
               (open == '{' && close == '}');
    }

    private String rotateLeft(String s) {
        return s.substring(1) + s.charAt(0);
    }
}
  1. 문자열 길이만큼 for문 돌면서, 유효성 검사를 하여 result 값을 높이고 회전을 한다.

  2. isValid라는 유효성 검사 함수 안에서는 스택을 사용하였다. 이전 괄호 문제의 코드를 가져와서 활용함
    여기서 기존 코드와 다른 점은 괄호 종류가 많아져서 매치시켜야한다는 점..!

  3. isMatchingPair 함수에서는 말 그대로 괄호가 서로 짝이 맞는지 확인한다.
    결론적으로 짝이 안맞거나, 동일 괄호가 아니면 유효성 검사 코드에서 false를 리턴

  4. 유효성 검사가 끝나면 회전 수행
    rotateLeft 메서드에서는 substring과 charAt 메서드를 활용해 간단하게 회전.


substring

지정된 시작 인덱스에서 문자열 끝까지의 부분 문자열 반환 메서드
특정 부분 문자열을 추출하는 데 사용됨

String str = "Hello, World!";
String sub = str.substring(7); // "World!"
String str = "Hello, World!";
String sub = str.substring(7, 12); // "World"

사실.. 기존 내 코드는 좀 더 복잡했는데 코드를 뜯어보면서 함수로 뜯어고쳤다 ㅎ
쉽게 봤는데 좀 어려워서 반전이었고, , 여전히 문자열을 자유롭게 다루는건 안되고 있다는 것도 알게 되었다.
특히 앞 문자를 떼어내어 맨 뒤로 붙이는걸 굳이 복잡한 개념 쓸 필요 없이 문자열 메서드를 통해 간단하게 구현할 수 있다는 것도 새롭게 알게 되어 앞으로 유용하게
쓸 것 같다.

profile
Developer's Logbook

0개의 댓글