알고리즘/프로그래머스 Level2

[프로그래머스,자바] Level2: 괄호 회전하기

류창 2021. 11. 7. 14:28
반응형

 

문제분석 

 

여러가지 괄호가 섞인 문자열을 입력값으로주어집니다.

 

이 괄호를  문자열의 길이만큼 회전시키고,  회전시킨값이 '올바른 괄호 문자열'이라면, 

결과값을 1 늘려주는 문제다.

 

 

-----------------------------------------------------------------------------------------

 

우선, 문자열을 회전시키는 로직을 구현해야한다.

 

필자는,  문자열의 맨 첫번째 문자를 기억해두고,

 

문자열을 idx 1부터 자른뒤 문자를 붙였다.

 

 

문자열 회전시키는 로직을 구현했다면,

 

회전시킨 문자가 올바른 괄호 문자열인지 확인해야한다.

 

이 올바른 괄호 문자열을 판별하는건 여러방법이 있겠지만,

Stack을 사용해서 구현하는게 제일 깔끔하다.

 

괄호가 3종류가 존재하니,  {} , (), [] 세종류의 경우를 나눠서 넣으면된다.

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        String str=s;
        
        for(int i=0;i<s.length();i++){
            char temp=str.charAt(0);
            str=str.substring(1)+temp;
            if(isCorrect(str)){
                answer++;
            }
        }
        
        return answer;
    }
    
    public boolean isCorrect (String str){
        Stack<Character> s = new Stack<>();
        
        char[] arr = str.toCharArray();
        
        for(char data:arr){
            if(s.isEmpty()){
                s.push(data);
            }
            else if(s.peek()=='['&&data==']'){
                s.pop();
            }
            else if(s.peek()=='('&&data==')'){
                s.pop();
            }
            else if(s.peek()=='{'&&data=='}'){
                s.pop();
            }
            else{
                s.push(data);
            }
        }
        
        if(s.isEmpty()){
            return true;
        }
        
        return false;
    }
}
cs
반응형