원하는 것은 뭐든지

99클럽 코테 스터디 28일차 TIL , 괄호 회전하기 본문

개발/문제풀이

99클럽 코테 스터디 28일차 TIL , 괄호 회전하기

댕로그😏 2024. 8. 18. 20:00
반응형

문제

풀이

문제 설명에 영어는 괜히 헷갈리게만 한다.

이 문제는 괄호들이 주어지는데 문자열을 한 글자씩 옆으로 밀면서 올바른 괄호가 되는 경우를 찾아서 return 하면 된다.

왼쪽 끝으로 민 문자열은 오른쪽으로 가서 붙는다.

제출 1 - 정답

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();
            String str = sb.append(s.substring(i,s.length()))
                            .append(s.substring(0,i))
                            .toString();
            
            if(check(str)) answer++;
        }
        
        return answer;
    }
    private boolean check(String str){
        Deque<Character> stack = new ArrayDeque<>();
        char[] chrArr = str.toCharArray();
        
        for(int i=0;i<chrArr.length;i++){
            if(chrArr[i] == '[' || chrArr[i] == '{' || chrArr[i] == '('){
                stack.push(chrArr[i]);
            }else if(stack.peek() == null && (chrArr[i] == ']' || chrArr[i] == '}' || chrArr[i] == ')')){
                return false;
            }else{
                if(chrArr[i] == ']' && stack.peek() != '[') return false;
                if(chrArr[i] == '}' && stack.peek() != '{') return false;
                if(chrArr[i] == ')' && stack.peek() != '(') return false;
                stack.pop();
            }
        }
        
        return stack.isEmpty();
    }
}

 

StringBuilder를 사용해서 문자열을 만들어서 확인하는 방식으로 진행했다.

다른 정답

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        int n = s.length();
        
        for (int i = 0; i < n; i++) {
            if (isValid(s, i, n)) {
                answer++;
            }
        }
        
        return answer;
    }
    
    private boolean isValid(String s, int start, int n) {
        Deque<Character> stack = new ArrayDeque<>();
        
        for (int i = 0; i < n; i++) {
            char c = s.charAt((start + i) % n);
            if (c == '[' || c == '{' || c == '(') {
                stack.push(c);
            } else {
                if (stack.isEmpty()) {
                    return false;
                }
                char top = stack.pop();
                if (c == ']' && top != '[') return false;
                if (c == '}' && top != '{') return false;
                if (c == ')' && top != '(') return false;
            }
        }
        
        return stack.isEmpty();
    }
}

 

여부를 확인 할 때 시작값을 받아서 활용한다.

조건문이 간결하게 되었다.

TIL

  • 조건설정
반응형
Comments