728x90
반응형
문제
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
내 생각
기본적인 생각은 이러하다. 스택을 이용하면 아주 간단한 문제!
- 기본적으로 '( )' 라는 짝이 되어야 올바른 괄호이다.
- 스택에는 '(' 만 넣어두고 ')'이 들어올 때에만 삭제시킨다.
- 스택에 비어있는데 ')'가 들어온다면? → False를 반환한다.
- for문을 다 돌았는데 stack이 비어있지 않다면? → False를 반환한다.
- 모든 조건을 통과하면 True를 반환한다.
내 코드
def solution(s):
stack = []
for c in s:
#현재 문자가 '('이면 스택에 추가
if c == "(":
stack.append(c)
#현재 문자가 ')'일 경우
else:
#스택이 비어 있지 않다면(스택 안에 '('가 존재함) -> 짝이 맞는다.
if stack:
#스택에서 제거
stack.pop()
#스택이 비어있는데 ')'가 나왔다면 -> 올바른 짝 아님
else:
return False
#문자열을 모두 확인했는데 스택이 비어 있지 않다면? -> 올바르게 닫히지 않았음.
if stack:
return False
return True
728x90
반응형
'Algorithm > 코딩테스트 (Python)' 카테고리의 다른 글
[프로그래머스][딕셔너리(해시맵)] 의상 (0) | 2023.12.01 |
---|---|
[프로그래머스][큐와데크] 프로세스 (1) | 2023.11.29 |
[Baekjoon] [백준 2751번] 수 정렬하기 2 (0) | 2023.11.25 |
[프로그래머스][해시] 전화번호 목록 (0) | 2023.11.22 |
[SWEA 5110][파이썬 S/W 문제해결 기본]. 7일차 - 수열 합치기 (1) | 2023.11.21 |
댓글