자바/코딩테스트
[프로그래머스] 괄호 회전하기 - Java(자바)
대전집주인
2024. 3. 26. 09:42
728x90
SMALL
문제 이해
- (),{},[] 세종류의 괄호로 구성된 문자열이 존재하는데 문자열을 회전시켰을때 괄호가 올바른 괄호 문자열이 몇번인지 구하여라
- 문자열 회전 문제는 "[](){}" + "[](){}" 이런식으로 두개의 문자열을 합하여 index 0부터 문자열 길이만큼 비교하고 index 값을 올려서 반복 비교한다.
- 괄호의 완성은 "{()}" 이와 같이 괄호를 열었으면 제대로 닫아야 한다. "{(})" 이런 식의 괄호는 열고 닫았지만 닫는 순서가 잘못되었다.
- 문자열의 값을 스택에 한문자씩 집어넣고 한문자씩 꺼내면서 "()", "{}","[]" 이와 같이 스택의 마지막값이 지금 문자열의 값의 열고 닫는 괄호가 맞는지 비교한다.
- 스택에서 하나씩 꺼내 완성된 괄호가 모두 존재 하면 스택에는 아무런 값이 미존재 해야한다.
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
String[] temp = (s + s).split("");
for(int i = 0; i<s.length(); i++){
Stack<String> stack = new Stack<>();
for(int j = i; j<s.length()+i; j++){
if(!stack.isEmpty()){
if((stack.peek().charAt(0) == '(' && temp[j].charAt(0) == ')')
|| (stack.peek().charAt(0) == '{' && temp[j].charAt(0) == '}')
|| (stack.peek().charAt(0) == '[' && temp[j].charAt(0) == ']')){
stack.pop();
}else{
stack.push(temp[j]);
}
}else{
stack.push(temp[j]);
}
}
if(stack.size() == 0){
answer++;
}
}
return answer;
}
}
728x90
LIST