✴️ 문제
https://school.programmers.co.kr/learn/courses/30/lessons/76502
✴️ 문제 풀이
문자열을 회전한다는게 무슨 의미인지만 이해하면 풀이는 어렵지 않았다.
회전시킨 문자열마다 올바른 괄호 문자열인지를 확인해주면 된다.
만약 올바른 괄호 문자열이라면 `answer + 1`을 해주면 된다.
아래의 코드에서는 `chkRotation`을 통해서 이를 확인해줬다.
Stack을 이용해서 열리는 괄호 `(`, `{`, `[`라면 추가해주고
닫히는 괄호의 경우 `stack.pop()`과 짝이 맞다면 `continue`지만,
짝이 맞지 않다면 `false`를 리턴해서 올바르지 않은 괄호 문자열임을 나타냈다.
최종적으로 stack이 비어있다면 모두 pop된 상황이어서 올바른 괄호 문자열이다.
✴️ 전체 코드(Java)
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length(); i++){
answer += chkRotation(s) ? 1 : 0;
s = s.substring(1, s.length()) + s.substring(0, 1);
}
return answer;
}
public boolean chkRotation(String str){
Stack<Character> stack = new Stack<>();
for(int i=0; i<str.length(); i++){
char cur = str.charAt(i);
if(cur == '(' || cur == '{' || cur == '['){
stack.push(cur);
}else{
if(!stack.isEmpty()){
char top = stack.pop();
if(top == '(' && cur == ')') continue;
else if(top == '{' && cur == '}') continue;
else if(top == '[' && cur == ']') continue;
else return false;
}else return false;
}
}
if(!stack.isEmpty()) return false;
return true;
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 뉴스 클러스터링 (Lv.2) (0) | 2025.04.10 |
---|---|
[프로그래머스] 영어 끝말잇기 (Lv.2) (0) | 2025.04.09 |
[프로그래머스] 오픈채팅방 (Lv.2) (0) | 2025.04.05 |
[프로그래머스] 주차 요금 계산 (Lv.2) (0) | 2025.04.04 |
[프로그래머스] 주식 가격 (Lv.2) (0) | 2025.04.02 |