Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- SQL
- Extendable hashing
- B tree 데이터삽입
- 백엔드
- 온디바이스AI
- 데이터베이스
- SDK
- CPU 스케줄링
- 프로세스 주소 공간
- 코딩애플
- 운영체제와 정보기술의 원리
- 쉬운 코드
- 네트워크
- Git
- BreadcrumbsComputer-Networking_A-Top-Down-Approach
- 트랜잭션
- 커널 동기화
- concurrency control
- 반효경
- 시그널 핸들러
- vite
- 시스템프로그래밍
- 개발남노씨
- 김영한
- 쉬운코드
- 인터럽트
- 갤럭시 S24
- 운영체제
- 코딩테스트 [ ALL IN ONE ]
- recoverability
Archives
- Today
- Total
티끌모아 태산
괄호 회전하기 본문
728x90
문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
- (), [], {} 는 모두 올바른 괄호 문자열입니다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
❗제한사항
- s의 길이는 1 이상 1,000 이하입니다.
핵심 아이디어
해당 문제는 스택을 활용해서 풀 수 있다.
- 만약 스택이 비어있다면, 해당 글자를 스택에 저장한다.
- 스택이 비어있지 않다면, 스택의 마지막에 저장되어 있는 괄호와 현재 문자를 검사한다. 매칭이 되면 pop()
- s 검사 후, 스택이 비어 있다면 +1
- s 첫글자를 마지막 글자로 옮김
코드 구현
def solution(s):
answer = 0
s = list(s)
for i in range(len(s)):
stack = []
for j in s:
if len(stack) > 0:
if stack[-1] == '[' and j == ']': stack.pop()
elif stack[-1] == '(' and j == ')': stack.pop()
elif stack[-1] == '{' and j == '}': stack.pop()
else:
stack.append(j)
else:
stack.append(j)
if len(stack) == 0:
answer += 1
s.append(s.pop(0))
return answer
def solution(s):
answer = 0
s = list(s)
for _ in range(len(s)):
stack = [] # 스택 초기화
for i in range(len(s)):
if len(stack) > 0: # 스택이 비어있지 않다면
if stack[-1] == '[' and s[i] == ']': stack.pop()
elif stack[-1] == '{' and s[i] == '}': stack.pop()
elif stack[-1] == '(' and s[i] == ')': stack.pop()
else:
stack.append(s[i])
else: # 스택이 비어 있다면
stack.append(s[i])
if len(stack) == 0:
answer += 1
s.append(s.pop(0))
return answer
728x90