코딩테스트/프로그래머스

[Java] 프로그래머스 - 괄호 회전하기 (2단계)

배똥회장 2022. 7. 6. 14:20
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        
        //String으로 다루는 것보다 char로 다루는 것이 시간 차지를 덜 하기 때문에
        //s을 char 배열로 만들고 ArrayList에 담기
        char[] c = s.toCharArray();
        ArrayList<Character> arr = new ArrayList<>();
        for (int i = 0; i < c.length; i++) {
            arr.add(c[i]);
        }
        
        //만약 list의 길이가 홀수일 경우에는 올바른 괄호를 만들 수 없기 때문에 그냥 바로 0 리턴
        if (arr.size() % 2 != 0) return 0;
        int bracket = arr.size() / 2;
        
        //한 칸씩 한 칸씩 확인하면서 뒤로 넘기기
        for (int i = 0; i < arr.size(); i++) {
            Stack<Character> stack = new Stack<>();
            int count = 0;
            for (int j = 0; j < arr.size(); j++) {
                char word = arr.get(j);
                
                //만약 닫는 괄호이고,
                if (word == ']' || word == '}' || word == ')') {
                    //스택이 비었다면 탈출
                    if (stack.empty()) break;
                    
                   	//스택 제일 위의 값이 동일한 모양의 열린 모양이 아니라면 탈출
                    if (word == ']' && stack.peek() != '[') break;
                    if (word == '}' && stack.peek() != '{') break;
                    if (word == ')' && stack.peek() != '(') break;
                    
                    stack.pop();
                    count++;
                } else { //단어가 열린 괄호라면 스택에 추가
                    stack.push(word);
                }
            }
            
            //만약에 만들어진 괄호가 만들 수 있는 괄호 숫자와 동일하다면 답+1
            if (count == bracket) answer++;
            
            //맨 앞의 값은 맨 뒤로 추가하고 삭제하기
            arr.add(arr.get(0));
            arr.remove(0);
        }
        return answer;
    }
}

 

테스트 1 통과 (18.03ms, 80.9MB)
테스트 2 통과 (5.90ms, 85.8MB)
테스트 3 통과 (7.39ms, 81.4MB)
테스트 4 통과 (11.93ms, 83MB)
테스트 5 통과 (20.04ms, 79.5MB)
테스트 6 통과 (8.93ms, 74.8MB)
테스트 7 통과 (14.73ms, 75.2MB)
테스트 8 통과 (18.97ms, 73MB)
테스트 9 통과 (38.12ms, 86.6MB)
테스트 10 통과 (28.12ms, 82.1MB)
테스트 11 통과 (52.26ms, 86.3MB)
테스트 12 통과 (0.13ms, 73.3MB)
테스트 13 통과 (0.14ms, 73.2MB)
테스트 14 통과 (0.18ms, 75.3MB)

 

 

 

 

 

 

728x90