문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
- (), [], {} 는 모두 올바른 괄호 문자열입니다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- s의 길이는 1 이상 1,000 이하입니다.
입출력 예
s | result |
"[](){}" | 3 |
"}]()[{" | 2 |
"[)(]" | 0 |
"}}}" | 0 |
입출력 예 설명
입출력 예 #1
- 다음 표는 "[](){}" 를 회전시킨 모습을 나타낸 것입니다.
x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
0 | "[](){}" | O |
1 | "](){}[" | X |
2 | "(){}[]" | O |
3 | "){}[](" | X |
4 | "{}[]()" | O |
5 | "}[](){" | X |
- 올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 합니다.
입출력 예 #2
- 다음 표는 "}]()[{" 를 회전시킨 모습을 나타낸 것입니다.
x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
0 | "}]()[{" | X |
1 | "]()[{}" | X |
2 | "()[{}]" | O |
3 | ")[{}](" | X |
4 | "[{}]()" | O |
5 | "{}]()[" | X |
- 올바른 괄호 문자열이 되는 x가 2개이므로, 2를 return 해야 합니다.
입출력 예 #3
- s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.
입출력 예 #4
- s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.
from collections import deque
def check(s): #stack 사용
stack = []
for i in s:
last = stack[-1] if stack else 0
if (last == "(" and i == ")") or (last == "{" and i == "}") or (last == "[" and i == "]"):
stack.pop()
else:
stack.append(i)
return True if len(stack) == 0 else False
def solution(s):
answer = 0
s = deque([x for x in s]) #편하게 회전하기 위해 deque 사용
for i in range(len(s)):
bracket = s.pop()
s.appendleft(bracket)
if check(s):
answer += 1
return answer
15분 만에 빠르게 푼 문제! :)
괄호 문자열 회전할 때 사실 큐는 사용하지 않아도 됐는데 편하게 회전해주기 위해서 사용했다.
안 사용했다면 너무 귀찮았을 것 같아 ...
괄호 문제의 핵심은 언제나 스택을 이용하는 것 ..!
잠깐 머리에서 딴생각을 해서... ( { [ } ] ) 는 올바른가? 하는 생각을 했는데 고민할 것 없다.
AB가 아니므로 올바르지 않은 괄호니까 .,,,,,
다음 주에는 내가 잘 못하는 BFS DFS 힙구현 문제에 또 도전해봐야겠다.
벌써 두려워 .,,,
주말동안 일할 일이 있어서 잠시라도 시간이 나지 않을 것 같아 주말동안 풀어야 할 두 문제를 미리 풀었다
자기 전에 커밋만 해주려고 한다 ... 1일 1커밋 도전.. !
맘 편히 일하고 올 수 있겠군
'Code IT > Algorithm' 카테고리의 다른 글
[프로그래머스] 숫자의 표현 (Python) - deque (0) | 2023.01.17 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 (Python) (0) | 2023.01.16 |
[프로그래머스] 카펫 (Python) (0) | 2023.01.13 |
[프로그래머스] 디펜스 게임 (Python) - heapq, heappush (0) | 2023.01.12 |
[프로그래머스] 택배상자 (Python) (0) | 2023.01.12 |
댓글