[JAVA 문제 풀이] 290.괄호 회전하기

프로그래머스 (76502)
Stupefyee's avatar
May 30, 2025
[JAVA 문제 풀이] 290.괄호 회전하기
notion image
 

내가 작성한 코드

import java.util.*; class Solution { public int solution(String s) { int count = 0; int n = s.length(); for (int i = 0; i < n; i++) { String rotated = s.substring(i) + s.substring(0, i); // 문자열 회전 if (isValid(rotated)) { count++; } } return count; } // 괄호 문자열이 올바른지 확인하는 메서드 private boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for (char ch : s.toCharArray()) { if (ch == '(' || ch == '[' || ch == '{') { stack.push(ch); } else { if (stack.isEmpty()) { // 닫힌 괄호로 시작할 경우 return false; } char top = stack.pop(); if ((ch == ')' && top != '(') || (ch == ']' && top != '[') || (ch == '}' && top != '{')) { return false; } } } return stack.isEmpty(); } }
 

다른 사람의 코드

import java.util.*; class Solution { private final Stack<Character> stack = new Stack<>(); public int solution(String s) { int answer = 0; StringBuilder stringBuilder = new StringBuilder(s); for (int i = 0; i < s.length(); i++) { // 문자열 회전 stringBuilder.append(stringBuilder.charAt(0)); stringBuilder.deleteCharAt(0); if (correctParenthesis(stringBuilder.toString().toCharArray())) answer++; } return answer; } // 전체 괄호를 검사하는 메서드 private boolean correctParenthesis(char[] s) { for (char c : s) { if (!(check(c, '(', ')') && check(c, '[', ']') && check(c, '{', '}'))) return false; } return stack.isEmpty(); } // 괄호를 검사하는 메서드 private boolean check(char c, char a, char b) { if (c == a) stack.push(a); else if (c == b) if (!stack.isEmpty() && stack.peek() == a) stack.pop(); else return false; return true; } }
 
Share article

stupefyee