본문 바로가기
Algorithm/Programmers

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

by 광진구뚝배기 2021. 6. 2.

알고리즘 문제 풀이 / 프로그래머스 (programmers)  - 괄호 회전하기

 

 

 

문제 링크

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

 

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

 

programmers.co.kr

 

문제 풀이

 

Map을 사용하여 key, value로 비교한다.

올바른 괄호 문자열 비교를 위해 Stack을 사용한다.

 

 

이번 풀이는 15점이나 줬다. 여태까지 내가 푼 문제들 중에 가장 배점이 높아서 뿌듯했다. 풀고나서 다른사람들의 풀이를 봤는데 내 코드가 조금 더 나은점이 하나 있었다. 그것은 바로 map 을 사용하여서 괄호의 짝을 미리 지정해둔것이다. (다른사람은 모두 일일히 가져와 비교했다)

어차피 나올 괄호는 () [] {} 세가지로 정해져있기 때문에 map 키에 는 열리는 괄호를 value 에는 닫히는 괄호를 넣어두고 비교했다.

 

 

public static int solution(String s) {
	int answer = 0;
	Map<String, String> bracket = new HashMap<>();
	Stack<String> check_stack = new Stack<>();
	bracket.put("(", ")");
	bracket.put("[", "]");
	bracket.put("{", "}");

	for(int count = 0; count < s.length(); count++) {
		for(int i = 0; i < s.length(); i++) {
			String str = s.substring(i ,i + 1);

			if(!bracket.containsKey(str)) {
				if(check_stack.size() == 0 
                			|| !bracket.get(check_stack.peek()).equals(str)) {
					break;
				}
				check_stack.pop();
					
				if(i == (s.length()-1) && check_stack.size() == 0) {
					answer++;
				}
					
			}else check_stack.push(str);
		}

		s = s.substring(1,s.length()) + s.substring(0,1);
		check_stack.clear();
	}

	return answer;

}
반응형

댓글