문제 링크
문제 풀이 과정
위 문제를 풀 때 두 가지 사항에 대해서 고려해서 문제를 풀어야겠다는 생각을 했다. 올바르지 못한 괄호가 나오는 경우는 크게 2가지로 나눠서 생각을 했다.
- 처음부터 닫는 괄호가 나올 경우.
- 괄호를 열었지만 개수만큼 닫지 않은 경우.
위 2가지 사항을 고려해서 함수를 다음과 같이 구성하니 문제가 정상적으로 해결되었다.
def solution(s):
answer = []
# 1. 괄호가 열기 전에 닫는 기호가 나올 경우
if s[0] == ")":
return False
for i in range(len(s)):
# 2. 괄호를 열었지만 개수만큼 닫지 않은 경우
if s[i] == "(":
answer.append("(")
elif s[i] == ")" and len(answer) > 0:
answer.pop()
if len(answer) != 0:
return False
return True
다만 처음에 문제를 풀때 elif에 answer에 길이가 0 초과라는 조건을 부여하지 않아 answer에 제대로 된 괄호끼리 만나 빈 리스트가 된 이후에 닫는 기호가 들어온 경우 빈 리스트에서 pop을 시도하게 되 오류가 발생하게 되어 실패했었다. 이런 부분부분을 고려해서 좀 더 세심하게 과정을 글로 작성하며 푸는게 좋을 것 같다.
아래의 경우 가장 많은 공감을 얻은 모범답안이다.
def is_pair(s):
st = list()
for c in s:
if c == '(':
st.append(c)
if c == ')':
try:
st.pop()
except IndexError:
return False
return len(st) == 0
큰 차이가 없을 수도 있지만 에러가 나는 경우를 고려해 리스트에 값이 있을 경우를 try catch문으로 별도로 처리해준 점이 인상깊었고, true false를 직접 적는게 아니라 boolean형의 코드를 제공해준 것이 좋은 코드라는 생각이 들었다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python] 42587 - 프로세스 (0) | 2024.07.10 |
---|---|
[프로그래머스][Python] 12906 - 같은 숫자는 싫어 (0) | 2024.07.03 |
[프로그래머스][Python] 크레인 인형뽑기 게임 (0) | 2024.04.11 |