본문 바로가기
개인 공부/TIL

[ TIL - PGS ] 99클럽 코테 스터디 28일차 TIL + 오늘의 학습 가이드

by 킴도비 2024. 8. 19.

💡 오늘의 학습 키워드

  • 스택/큐

 

✅ 오늘 공부한 내용

  • 오늘의 프로그래머스 문제! 괄호 회전하기
 

프로그래머스

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

programmers.co.kr

 

import java.util.*;

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

        // 주어진 문자열을 왼쪽으로 x칸 만큼 회전
        for (int i = 0; i < n; i++) {
            String rotated = rotateString(s, i);
            if (isValid(rotated)) {
                count++;
            }
        }

        return count;
    }
    
    // 문자열을 왼쪽으로 x만큼 회전하는 함수
    private String rotateString(String s, int x) {
        return s.substring(x) + s.substring(0, x);
    }

    // 괄호 문자열이 올바른지 체크하는 함수
    private boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {
            // 여는 괄호를 스택에 삽입
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
            } else {
                // 닫는 괄호가 나왔을 때, 스택이 비어있거나 짝이 맞지 않으면 false
                if (stack.isEmpty()) return false;
                char top = stack.pop();
                if ((c == ')' && top != '(') ||
                    (c == '}' && top != '{') ||
                    (c == ']' && top != '[')) {
                    return false;
                }
            }
        }

        // 모든 과정을 거쳤을 때 스택이 비어있어야 올바른 괄호 문자열
        return stack.isEmpty();
    }
}

 

👩‍💻 내일은 무엇을 학습할 것인가?

  • 항해99 문제 풀기