본문 바로가기
코딩테스트 연습

프로그래머스 월간 코드 챌린지 - 괄호 회전하기(2)

by 고유빙글 2021. 4. 28.
package Example;

import java.util.ArrayList;
import java.util.Stack;

public class Solution2 {

	public static void main(String[] args) {

		int answer = 0;
		String s = "}]()[{";
		String[] s_arr = s.split("");
		String temp = "";
		int flag = 0;
		boolean flag1 = false;
		boolean flag2 = false;
		boolean flag3 = false;

		Stack<String> stack1 = new Stack<String>();
		Stack<String> stack2 = new Stack<String>();
		Stack<String> stack3 = new Stack<String>();

		while (flag < s.length()) {

			for (int i = 0; i < s_arr.length; i++) {
				System.out.print(s_arr[i]);
			}
			System.out.println();
			
			for (int i = 0; i < s_arr.length; i++) {

				if (s_arr[i].equals("(")) {
					stack1.push(s_arr[i]);
				}
				if (s_arr[i].equals("{")) {
					stack2.push(s_arr[i]);
				}
				if (s_arr[i].equals("[")) {
					stack3.push(s_arr[i]);
				}

				if (s_arr[i].equals(")")) {
					if (stack1.contains("(")) {
						stack1.pop();
						flag1 = true;
						System.out.println("test1");
					}

				}
				if (s_arr[i].equals("}")) {
					if (stack2.contains("{")) {
						stack2.pop();
						flag2 = true;
						System.out.println("test2");
					}

				}
				if (s_arr[i].equals("]")) {
					if (stack3.contains("[")) {
						stack3.pop();
						flag3 = true;
						System.out.println("test3");
					}

				}
				
				
			}

			while(stack1.empty()==false) {
				stack1.pop();
			}
			while(stack2.empty()==false) {
				stack2.pop();
			}
			while(stack3.empty()==false) {
				stack3.pop();
			}
			
			
			
			if (flag1 && flag2 && flag3) {
				System.out.println("test4");
				answer++;
				flag1 = false;
				flag2 = false;
				flag3 = false;
				
			}
			
			temp = s_arr[0];
			for (int i = 0; i < s_arr.length; i++) {

				if (i == s_arr.length - 1) {
					s_arr[i] = temp;
				} else {
					s_arr[i] = s_arr[i + 1];
				}
			}
			
			
			flag++;
		}

		System.out.println(answer);
	}

}

 

 

이렇게 바꿔보았다 answer를 증가시키는 코드의 위치와 flag들을 초기화시키는 코드의 위치가 포문안에 있으면 안됐고,

stack을 초기화 시키는 과정이 없으면 누적되어 판단하기에 오류가 발생했다.

 

이경우 테스트 예제는 모두 정상적으로 통과했고, 실제로 문자열의 이동과 answer 카운트 조건도 확인해보았을떄 잘 처리되었으나 문제 제출시 오류가 많이 있다고 나왔다.

 

도저히 모르겠어서 답을 봐 볼까 한다. 흑흑