어제의 나보다 성장한 오늘의 나

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

알고리즘/프로그래머스(Programmers)

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

NineOne 2021. 4. 15. 22:25

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

 

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

 

programmers.co.kr

import java.io.*;
import java.util.*;

class Solution {
	public int solution(String s) {
		int answer = 0;
		
		for(int i=0; i<s.length(); i++) {
			if(isCheckBracket(s)) answer++;
			s = s.substring(1,s.length()) + s.charAt(0);
		}
		
		return answer;
	}

	private boolean isCheckBracket(String s) {
		Stack<Character> stack = new Stack<>();
		
		for(int i=0; i<s.length(); i++) {
			char a = s.charAt(i);
			switch(a) {
			case '[':
			case '{':
			case '(':
				stack.add(a);
				break;
			case ']':
                if(stack.size() ==0 || stack.peek() !='[') return false;
                stack.pop();
				break;
			case '}':
                if(stack.size() ==0 || stack.peek() !='{') return false;
                stack.pop();
				break;
			case ')':
                if(stack.size() ==0 || stack.peek() !='(') return false;
				stack.pop();
				break;
			}
		}
		
		if(stack.size() !=0) return false;
		return true;
	}

}

정리

  • substring을 이용해서 배열을 돌려주었습니다.
  • stack을 사용하여서 괄호의 짝을 검사해주었습니다. 열리는 괄호는 스택에 넣어주고 닫히는 괄호가 나온다면 stack에서 빼주면 됩니다. 
  • 마지막으로 stack에도 남아 있다면 괄호의 갯수가 안 맡기 때문에 false입니다.
Comments