728x90
코드 힌트
- 문자열 회전: 문자열을 회전시켜 모든 가능한 상태를 검사해야 합니다.
저는 이를 위해 substring 메서드를 사용했습니다. StringBuilder등 다양한 방법으로 회전시켜도 상관 없습니다 - 스택을 이용한 괄호 매칭: 스택을 이용해 괄호의 짝을 맞춥니다. 열린 괄호가 스택에 쌓이고, 닫힌 괄호가 들어올 때 스택의 꼭대기와 짝이 맞으면 스택에서 제거합니다.
- 올바른 괄호 문자열 판별: 모든 문자를 검사한 후 스택이 비어있다면, 해당 문자열은 올바른 괄호 문자열입니다.
정답은 더보기 클릭
더보기
더보기
import java.util.Stack;
class Solution {
public int solution(String s) {
int result = 0;
// 문자열의 크기 == 회전 횟수
for (int i = 0; i < s.length(); i++) {
// i를 기준으로 substring 하기
String rotatedStr = s.substring(i) + s.substring(0,i);
Stack<Character> stack = new Stack<>();
// 문자 한개씩 가져오기
for (char c : rotatedStr.toCharArray()) {
// stack이 비어있으면 추가하고 continue
if (stack.isEmpty()) {
stack.push(c);
continue;
}
// ) } ] 값이 들어왔을 때 stack 제일 위에있는 요소가 매칭이 되면 삭제하기
if (c == ')' && stack.peek() == '(') {
stack.pop();
continue;
} else if (c == '}' && stack.peek() == '{') {
stack.pop();
continue;
} else if (c == ']' && stack.peek() == '[') {
stack.pop();
continue;
}
// 매칭이 되지 않거나 { [ ( 가 들어오면 stack에 넣기
stack.push(c);
}
// 전부 돌았을 때 stack의 크기가 0(모두 매칭되어 삭제됐을 때)일 때 result + 1하기
if (stack.size() == 0) {
result += 1;
}
}
return result;
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] 타겟넘버 (0) | 2024.07.09 |
---|---|
[프로그래머스] 할인 행사 (0) | 2024.07.04 |
[프로그래머스] N개의 최소공배수 (0) | 2024.06.29 |
[프로그래머스] 영어 끝말잇기 (0) | 2024.06.27 |
[프로그래머스] 카펫 (0) | 2024.06.27 |