목차
올바른 괄호
괄호 문자열이 입력되면 올바른 괄호이면 "YES", 올바르지 않으면 "NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
제한사항:
• 문자열 s의 길이는 100을 넘지 않습니다.
나의 코드
def solution(s):
answer = 'YES'
stack=[]
for x in s:
if x=='(':
stack.append(x)
elif stack and x==')':
stack.pop()
elif len(stack)==0 and x==')':
answer="NO"
if len(stack)>0:
answer="NO"
return answer
print(solution("((()))()"))
print(solution("(()(()"))
print(solution("()())"))
print(solution("())("))
print(solution("((())))()("))
괄호의 한 쌍인 ()를 맞추기 위해 ( 일 경우 스택에 쌓고 )인 경우 pop을 한다.
그러면 올바른 괄호의 경우 모든 입력값이 들어온 뒤 스택은 빈 스택이 된다.
하지만 이상이 있는 스택은 두가지 형태로 나타난다.
1. 스택이 비었는데 )가 들어온 경우 [ ) 가 더 들어 경우]
2. 모든 입력값 이후 스택에 값이 남아있는경우 [ ( 가 더 들어온 경우 ]
정답 코드
def solution(s):
answer = "YES"
stack = []
for x in s:
if x == ')':
if len(stack) == 0:
return "NO"
stack.pop()
else:
stack.append(x)
if len(stack) > 0:
return "NO"
return answer
print(solution("((()))()"))
print(solution("(()(()"))
print(solution("()())"))
print(solution("())("))
print(solution("((())))()("))
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[스택 과 큐] -연속된 문자 지우기 (0) | 2024.01.23 |
---|---|
[스택과 큐] -Backspace (0) | 2024.01.23 |
[이진탐색] -고정된 숫자 (0) | 2024.01.23 |
[이진탐색] -트럭 찾기 (0) | 2024.01.23 |
이진탐색 (0) | 2024.01.23 |