https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
StringBuffer sb = new StringBuffer(s);
for(int i=0; i<s.length();i++) {
if(check(sb)==true) answer++;
sb.append(sb.charAt(0));
sb.deleteCharAt(0);
}
return answer;
}
public boolean check(StringBuffer sb) {
Stack<Character> stack = new Stack<Character>();
if(sb.length()%2!=0) return false;
for(int i =0; i<sb.length(); i++) {
switch(sb.charAt(i)) {
case ')': if (stack.empty()) return false;
else if(stack.peek() == '(') {stack.pop(); break;}
case '}': if (stack.empty()) return false;
else if(stack.peek() == '{') {stack.pop(); break;}
case ']':if (stack.empty()) return false;
else if(stack.peek() == '[') {stack.pop(); break;}
default :
stack.push(sb.charAt(i));
break;
}
}
return stack.empty();
}
}
스택구조를 활용한 메소드 check()를 만들었다.
if (stack.empty()) return false; 를 추가하지 않으니까 첫 타자에 닫는 괄호가 나왔을때 stack.peek()할게 없어서 EmptyStackException이 나서 추가해줬다.
그 다음 메인메소드에서 s로 스트링버퍼 sb를 만들어서 check(sb)가 true이면 answer+1씩 하고,
회전하는 것은 스트링버퍼의 append와 deleteCharAt으로 구현했다.
'CodingTest' 카테고리의 다른 글
[Java] 프로그래머스 레벨 2 #H-index (1) | 2024.02.26 |
---|---|
[Java] 프로그래머스 레벨 2 #n^2 배열 자르기 (0) | 2024.02.21 |
[Java] 프로그래머스 레벨 2 #연속 부분 수열 합의 개수 (0) | 2024.02.17 |
[Java] 프로그래머스 레벨 2 #귤 고르기 (getOrDefault 중복값 세기, 메소드 참조) (1) | 2024.02.15 |
[Java] 프로그래머스 레벨 2 #예상 대진표 (1) | 2024.02.07 |