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

2024. 12. 5. 12:23·Algorithm/Programmers
import java.util.Stack;

class Solution {
    public int solution(String s) {
        int answer = 0;
        int n = s.length();
        
        if (n == 1) {
            return 0; // 길이가 1이면 올바른 괄호 문자열이 될 수 없음
        }

        for (int i = 0; i < n; i++) {
            if (check(s, i)) {
                answer++;
            }
        }
        return answer;
    }

    // 특정 시작점으로 문자열 검사
    static boolean check(String s, int start) {
        Stack<Character> stack = new Stack<>();
        int n = s.length();

        for (int i = 0; i < n; i++) {
            char ch = s.charAt((start + i) % n);
            
            if (ch == '{' || ch == '(' || ch == '[') {
                stack.push(ch);
            } else {
                if (stack.isEmpty()) {
                    return false;
                }
                char top = stack.pop();
                if ((ch == '}' && top != '{') ||
                    (ch == ')' && top != '(') ||
                    (ch == ']' && top != '[')) {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}

 

풀이

1. 문자열의 첫번째 값이 맨뒤로 이동해야된다.

2. 그리고 그 맨뒤로 이동한 스트링의 값을 확인해야된다.

3. 그것을 이제 시작점과 i번째의 나눈 나머지를 이용해서 이어 붙여 괄호를 비교해준다.

 

 

느낀점

자바에서는 String이 새 값을 쓸 때마다 새로운 메모리에 적용하는데, 처음에 생각한게 원초적으로 그냥 subString을 이용해서 첫번째 값을 직접 뒤로 이동시켰다. 그러다보니 값을 계속 새로운 메모리 적용해서 메모리 초과가 나왔다. 다음 생각해본 방법이 이제 이전에 풀었던 문제들에서 아이디어를 얻었는데 %을 이용한 탐색이다. 시작 문자기준해서 i++일 때 문자열의 길이만큼 반복하면 해당 문자열을 한번 탐색된다. 앞으로 이것을 많이 사용할 것 같다. java에서는 정말 String에 대한 것은 메모리를 생각하며 조심히 다뤄야겠다. 물론 stringBuilder를 이용해도 좋았을 것같다.

 

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

 

저작자표시 (새창열림)

'Algorithm > Programmers' 카테고리의 다른 글

[JAVA] 프로그래머스 튜플  (0) 2024.12.10
[JAVA] 프로그래머스 [1차] 캐시  (1) 2024.12.09
[JAVA] 프로그래머스 할인행사  (0) 2024.12.04
[JAVA] 프로그래머스 연속 부분 수열 합의 개수  (0) 2024.12.02
[JAVA] 프로그래머스 예상 대진표  (1) 2024.11.30
'Algorithm/Programmers' 카테고리의 다른 글
  • [JAVA] 프로그래머스 튜플
  • [JAVA] 프로그래머스 [1차] 캐시
  • [JAVA] 프로그래머스 할인행사
  • [JAVA] 프로그래머스 연속 부분 수열 합의 개수
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    Java
    프로그래머스
    위클리 챌린지
    dp
    SpringSecurity
    오블완
    c++ 기초 플러스
    티스토리챌린지
    dfs
    spring
    JPA
    JWT
    백준
    알고리즘
  • hELLO· Designed By정상우.v4.10.0
chanheess
[JAVA] 프로그래머스 괄호 회전하기
상단으로

티스토리툴바