본문 바로가기
코딩테스트/프로그래머스

Level2 - 괄호 회전하기

by 고구마는호박고구마 2023. 5. 25.

(), [] , {} 는 올바른 괄호이다.

 

"[](){}" 이렇게 들어오고나서 한 칸 씩 회전해서 올바른 기호가 몇 번 가능하냐는 문제

1회전 ](){}[ -> 올바른 괄호 x

2회전 (){}[] -> 올바른 괄호 o

3회전 ){}[]( -> 올바른 괄호 x

이런식으로 돌아서 올바른 괄호의 개수를 리턴 하라.

 

"}]()[{" 예시

 

 

공략

1. 문자열을 회전 할 수 있느냐

2. 올바른 괄호를 체크 할 수 있느냐 

+ 홀수면 무조건 올바른 괄호가 나올수 없다.

 

 

1. 문자열 회전  ( 1번째 위치부터 마지막까지 자른다. 그리고 뒤에 0번째 문자를 추가) 

public static int solution(String s) {
        if(s.length()%2==1) return 0;
        int cnt = 0;
        char[] arr = s.toCharArray();
        cnt = 0;
        // 1. 문자열 회전
        for(int i=0; i<s.length(); i++){
            char first = s.charAt(0);
            cnt += stack(s);
            s = s.substring(1)+first;
        }
        return cnt;
    }

 

 

 

2. 올바른 괄호 체크 ( 해시맵의 올바른 괄호의 짝을 넣어줘서 체크) 

public static int stack(String s){
    Stack<Character> stack = new Stack<>();
    HashMap<Character, Character> hashMap = new HashMap<>();
    hashMap.put(']', '[');
    hashMap.put('}', '{');
    hashMap.put(')', '(');

    //2. 올바른 괄호 체크
    for(char a : s.toCharArray()){
        if(a=='[' || a=='{' || a=='('){
            stack.push(a);
        }else{
            if(stack.isEmpty()) return 0;
            if(stack.peek()!=hashMap.get(a)) return 0;
            stack.pop();
        }
    }
    return 1;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

Level2 - n^2 배열 자르기  (0) 2023.05.26
Level2 - 연속 부분 수열 합의 개  (0) 2023.05.26
Level2 - 귤 고르기  (0) 2023.05.25
Level2 - 점프와 순간 이동  (2) 2023.05.23
Level2 - 예상 대진표  (0) 2023.05.22

댓글