728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/76502
코딩테스트 연습 - 괄호 회전하기
programmers.co.kr
문제풀이
stack과 문자열 자르기를 잘 이용하면 쉽게 풀 수 있는 문제였다.
1. 이중 for문을 이용해 겉에 for문에서는 문자열에 맨 앞 문자를 옮긴다.
2. 안에서는 stack을 이용해 괄호를 완성시키면 지운다.
3. stack을 구현할 때 주의할 점은 스택의 peek()를 봤을 때 닫는 괄호가 있다면 더 이상 볼 필요 없이 break를 해주면 된다.
4. stack의 peek와 내가 지금 넣으려는 괄호가 서로 쌍이 맞으면 그때 stack에서 pop만 해주면 된다.
5. 안에 for문을 나왔을 때 stack의 size가 0이면 모든 괄호가 쌍이 맞는 것이므로 answer을 증가시켜주고 문자열의 맨 앞 문자를 제거하고 그 값을 문자열 맨 뒤에 붙여준 뒤 겉에 for문을 진행한다.
코드
import java.util.Stack;
public class rotate_bracket {
public static void main(String[] args) {
String s = "[](){}";
rotate_bracket r = new rotate_bracket();
System.out.println(r.solution(s));
}
public int solution(String s){
int answer = 0;
for(int i = 0; i<s.length();i++){
Stack<Character> stack = new Stack<>();
stack.add(s.charAt(0));
for(int j = 1; j<s.length();j++){
if(stack.isEmpty()){
stack.add(s.charAt(j));
continue;
}if(stack.peek().equals(']') || stack.peek().equals('}') || stack.peek().equals(')')){
break;
}else if(s.charAt(j) == ')' && stack.peek().equals('(')){
stack.pop();
}else if(s.charAt(j) == '}' && stack.peek().equals('{')){
stack.pop();
}else if(s.charAt(j) == ']' && stack.peek().equals('[')){
stack.pop();
}else{
stack.add(s.charAt(j));
}
}
if(stack.size() == 0){
answer++;
}
char tmp = s.charAt(0);
s = s.substring(1);
s += tmp;
}
return answer;
}
}
728x90
댓글