하루에 한 문제

[프로그래머스 월간 코드 챌린지 시즌2] 괄호 회전하기 -Java 본문

알고리즘/프로그래머스

[프로그래머스 월간 코드 챌린지 시즌2] 괄호 회전하기 -Java

dkwjdi 2021. 4. 17. 23:57

https://programmers.co.kr/learn/courses/30/lessons/76502

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

import java.util.Stack;
class Solution {
	    public int solution(String s) {
	        int answer = 0;

	        for(int i=0; i<s.length(); i++) {
	        	s=s.substring(1)+s.substring(0,1);
	        	if(check(s)) answer++;
	        }
	        return answer;
	    }
		private boolean check(String s) {
			Stack <Character> stack = new Stack<>();

			for(int i=0; i<s.length(); i++) {
				char ch= s.charAt(i);
				if(stack.empty()) stack.add(ch);
				else {
					if(ch=='[' ||ch=='(' ||ch=='{') {
						stack.add(ch);
					}
					else {
						if(ch==']') {
							if(stack.peek()!='[') return false;
							else stack.pop();	
						}
						else if(ch==')') {
							if(stack.peek()!='(') return false;
							else stack.pop();
						}
						else if(ch=='}') {
							if(stack.peek()!='{') return false;
							else stack.pop();
						}
					}
				}
			}
			
			if(stack.size()!=0) return false;
			return true;
		}
	}

소요시간 : 15분

 

 

로직을 살펴보면

 

1. 문자열 s를 돌린다

   -substring을 통해서 맨 뒤의 문자를 잘라서 앞에 넣어주면 배열을 돌린 효과를 얻을 수 있습니다.

   - s의 길이가 1000밖에 되지 않기 때문에 시간은 충분합니다

2. 스택을 통해 올바른 괄호인지 확인한다. 

   - '{' , '(' , '[' 경우:  그냥 push 해줍니다

   - '}', ')' , ']' 경우 : 현재 stack의 peek에 있는 문자가 각각 대응되는 괄호인지 확인해줍니다.

      - 만약 대응되지 않는다면 false 반환

      - 만약 대응된다면 현재 스택을 pop해줍니다.

 

 

끝~!

 

 

Comments