코딩테스트/Programmers
[JAVA] 괄호 회전하기
hxx_1
2024. 4. 30. 15:38
< 풀이 >
import java.util.Stack;
public class Solution {
static public int solution(String s) {
int answer = 0;
for (int i = 0; i < s.length(); i++) {
Stack<Character> stack = new Stack<>();
String str = s.substring(i, s.length()) + s.substring(0, i);
for (int j = 0; j < str.length(); j++) {
char c = str.charAt(j);
if (stack.isEmpty()) {
stack.push(c);
} else if (c == ')' && stack.peek() == '(') {
stack.pop();
} else if (c == '}' && stack.peek() == '{') {
stack.pop();
} else if (c == ']' && stack.peek() == '[') {
stack.pop();
} else {
stack.push(c);
}
}
if (stack.isEmpty()) {
answer++;
}
}
return answer;
}
}
✏️ 풀이 방법
1. 반복문을 돌며 스택 생성, 문자열 자르기 ( i의 값 => 회전 횟수 )
2. 회전한 문자열이 올바른 괄호 문자열인지 확인하기 위한 반복문 실행
: 현재 값과 스택의 가장 위에 있는 값이 짝이 맞으면 pop ( )
: 스택이 비어있으면, 혹은 짝이 맞지 않으면 push ( )
: 반복문을 다 돌았을 때 스택이 비어있으면 올바른 괄호 !
✍🏻 느낀점
이 문제도 풀면서 너무 뻘짓을 많이 했다 ㅠㅠ 처음에 큐로 풀려고,, 했다가 내 풀이로 너무 복잡해지고, 어려워서 다른 사람들의 풀이를 보고 문제를 해결했다. 정말 오늘은 내 힘으로 푼 문제가 없는 느낌? 이런 유형의 문제는 보통 스택을 많이 사용하는 것 같다. 이 방법을 잘 기억해두고, 다음에는 뻘짓 하는 시간이 줄어들길 바란다^.^