https://school.programmers.co.kr/learn/courses/30/lessons/76502?language=java
문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
- (), [], {} 는 모두 올바른 괄호 문자열입니다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- s의 길이는 1 이상 1,000 이하입니다.
제출
1. Java
- Java의 Stack을 사용한 풀이
package Programmers.Java;
import java.util.*;
public class P76502 {
public int is_check(String s) {
Stack<Character> stack = new Stack<>();
for (char ch : s.toCharArray()) {
if (stack.empty()) {
stack.push(ch);
} else if (stack.peek() == '{' && ch == '}') {
stack.pop();
} else if (stack.peek() == '(' && ch == ')') {
stack.pop();
} else if (stack.peek() == '[' && ch == ']') {
stack.pop();
} else {
stack.push(ch);
}
}
return stack.empty() ? 1 : 0;
}
public int solution(String s) {
int answer = 0;
for (int i=0;i<s.length();i++) {
answer += is_check(s.substring(i, s.length()) + s.substring(0, i));
}
return answer;
}
}
2. Python
def is_check(s):
stack = []
for i in s:
if not stack:
stack.append(i)
elif stack[-1] == "{" and i == "}":
stack.pop()
elif stack[-1] == "(" and i == ")":
stack.pop()
elif stack[-1] == "[" and i == "]":
stack.pop()
else:
stack.append(i)
return False if stack else True
def solution(s):
answer = 0
for i in range(len(s)):
answer += is_check(s[i:] + s[:i])
return answer
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv2. 피보나치 수 | Java | Python (0) | 2023.01.16 |
---|---|
[Programmers] Lv2. 올바른 괄호 | Java | Python (0) | 2023.01.08 |
[Programmers] Lv2. 최댓값과 최솟값 | Java | Python (0) | 2023.01.08 |
[Programmers] Lv1. 같은 숫자는 싫어 | Java | Python (0) | 2023.01.03 |
[Programmers] Lv1. 성격 유형 검사하기 | Java | Python (0) | 2022.10.27 |
댓글