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

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

류창 2021. 12. 3. 23:22
반응형

 

문제분석

 

() [] {} 로 이루어진 괄호기호가 무작위로 배치가되어있습니다.

 

괄호 기호를 첫 입력과 똑같이 될때까지 한 문자씩 회전시킵니다.

 

회전시키는 도중 올바른 괄호문자열이 있으면 갯수를 셉니다.

 

 

2개의 로직을 구현할 필요가있습니다.

 

1. 해당 문자열이 올바른 괄호 문자열인지?

 

2. 해당 문자열을 한문자씩 회전시키기

 

 

1번 로직은 Stack<>으로 구현이 가능합니다.  '(' 와 ')'  '['와 ']' 만나면 제거를 한뒤, 

 

스택이 텅텅비어있으면 올바른 괄호문자열입니다.

 

2번 로직은 for loop로 문자열 길이만큼 반복을한뒤,

 

첫번째 문자를  맨 뒤로 보내면 끝입니다. (문자열 다루기)

 

문제풀이

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
반응형