괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
스택을 활용하는 대표적인 문제 유형입니다.
비슷한 문제로는 백준의 쇠막대기 문제가 있습니다.
s에서 for문을 돌며, 여는 괄호가 나오면 stack에 element를 추가하고, 닫는 괄호가 나오면 stack에서 element를 뺍니다.
다만 이 문제는 좀 단순한 편에 속해서 굳이 data structure를 생성하지 않아도 될 것 같다는 생각을 했습니다.
그래서 스택을 구현하는 대신 count라는 integer 변수를 선언하고, 여는 괄호에 1 추가, 닫는 괄호에 1 빼기로 구현했습니다.
def solution(s):
OPEN = '('
CLOSE = ')'
count = 0
for char in s:
if char == OPEN:
count += 1
if char == CLOSE:
count -= 1
# count값이 0보다 작아졌다는 뜻은, 이미 짝이 맞지 않는다는 뜻이므로 early return
# ex: '())', ')(' 이런 경우
if count < 0:
return False
return count == 0
리트코드(leetcode) / 윈도우 알고리즘 / minimum window substring (0) | 2022.11.16 |
---|---|
[정렬 알고리즘 시리즈] 버블정렬(Bubble Sort) (0) | 2022.05.07 |
파이썬의 딕셔너리는 어떻게 구현되어 있을까? -해시- (2) | 2021.04.04 |
백준 / DFS / 2667 : 단지번호 붙이기 / 파이썬 (0) | 2021.03.23 |
프로그래머스 / 크레인 인형뽑기 게임 / level 1 / 파이썬 (1) | 2021.03.21 |
댓글 영역