Coding Test
[Coding Test] 프로그래머스 2단계 - 괄호 회전하기
한비Skyla
2024. 12. 10. 14:41
📚 문제
✏️ 메모
1. 큐를 사용해서 문자열 회전 시키기.
2. 맨 앞의 괄호를 맨 뒤로 넣기.
[Java] 자바 Queue 클래스 사용법 & 예제 총정리
Queue란? Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조입니다. 큐는 데이터를
coding-factory.tistory.com
3. 스택을 이용해서 짝 맞추기.
(), {}, [] 를 확인하는 메서드가 필요함. ( 다음에 ) 가 있는지 { 다음에 } 가 있는지 [ 다음에 ] 가 있는지...
4. 열린 괄호가 있으면 stack 에 넣고, 닫힌 괄호가 있을 때 스택의 제일 윗 부분과 같으면 스택에서 제거함.
5. 모든 문자열 검사 후 스택이 비었으면, 올바른 문자열이므로 answer ++;
🔎 문제해결
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
class Solution {
public int solution(String s) {
int answer = 0;
// 문자열을 char 형 배열로 바꿔서 큐에 집어 넣기
Queue<Character> queue = new LinkedList<>();
for (char c : s.toCharArray()) {
queue.offer(c);
}
for (int i = 0; i < s.length(); i ++ ) {
// 만약 괄호가 다 닫혀 있다면 answer에 ++
if (isCorrect(queue)) {
answer ++;
}
// 맨 앞의 괄호를 맨 뒤로 넣기.
queue.offer(queue.poll());
}
return answer;
}
// 그 큐를 검사함.
// (), {}, [] 를 확인하는 메서드가 필요함.
// ( 다음에 ) 가 있는지 { 다음에 } 가 있는지 [ 다음에 ] 가 있는지...
public boolean isCorrect (Queue<Character> queue) {
Stack<Character> stack = new Stack<>();
for (char c : queue) {
// 열린 괄호이면 stack 에 넣기.
if ( c == '(' || c == '[' || c == '{' ) {
stack.push(c);
} else {
// 닫힌 괄호가 있으면 짝이 맞는지 검사.
// 닫힌 괄호가 있는데, 열린 괄호가 없으면 false
if (stack.isEmpty()) {
return false;
}
if ( c == ')' && stack.peek() == '(') {
stack.pop();
} else if (c == '}' && stack.peek() == '{') {
stack.pop();
} else if (c == ']' && stack.peek() == '[') {
stack.pop();
} else
return false;
}
}
// 스택이 다 비면 true
return stack.isEmpty();
}
}