728x90
풀이1
def solution(s):
right_cnt = 0
for i in s:
if i == '(':
right_cnt += 1
elif i == ')':
right_cnt -= 1
if right_cnt < 0:
return False
return right_cnt == 0
s 배열을 앞에서부터 순회한다.
올바르지 않은 경우는 다음 두 가지다.
1. 앞에서부터 순회했을 때, '(' 개수보다 ')'개수가 커지는 경우
2. s 배열을 전체 다 돌았는데 '(' 개수가 더 많은 경우
위 두 가지 경우를 고려하여 코드를 작성했다.
'(' 괄호 개수를 right_cnt 변수에 담는다. ')'괄호가 나오면 right_cnt의 값을 1씩 줄인다.
'(' 개수보다 ')' 개수가 더 커지면 False를 리턴해야한다. (<- 올바르지 않은 괄호)
그리고 반복문을 다 돌고난 뒤에 right_cnt가 0이 아니면 올바르지 않은 괄호이므로 False를 리턴한다.
더보기
이전 풀이
풀이 1
def solution(s):
answer = True
# )로 시작하면 false
if s[:1]==')':
answer = False
# (로 시작하면 )가 있어야함
# (()()) -> True
# ())( -> False
else :
cnt = 0
for i in s:
if i == '(':
cnt += 1
else:
if cnt != 0:
cnt -= 1
else:
answer = False
break
if cnt != 0:
answer = False
return answer
내 풀이
cnt 변수 사용.
- ) 로 시작하면 무조건 false
- ( 로 시작하면 ( 개수와 ) 개수가 일치해야 true. ( 개수가 남으면 false.
- 개수가 일치하더라도 중간에 ) 의 개수가 더 많아지는 시점이 존재하면 false. 예를 들어 "(()))(" 의 경우 false임.
풀이2
def solution(s):
stack = []
for i in s:
if i == '(':
stack.append(i)
else:
try:
stack.pop()
except IndexError:
return False
return len(stack) == 0
모범 답안 참고.
스택을 이용하여 풀이
- IndexError: list index out of range 는 리스트 범위를 벗어났을 때 발생하는 에러이다. 만약 리스트에 데이터가 존재하지 않는다면 pop을 할 수 없으므로 IndexError가 발생한다.
- 파이썬은 try catch문 대신에 try except문을 사용하여 예외처리한다.
- stack에 ( 가 남아있는지 if문으로 따로 빼서 확인하지 않고 return 부분에서 체크하여 true 또는 false로 반환한다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 프로세스 (python) (2) | 2024.01.05 |
---|---|
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 기능개발 (python) (1) | 2024.01.02 |
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 같은 숫자는 싫어 (python) (1) | 2023.12.31 |
[프로그래머스] 소수 찾기 (python) (0) | 2023.05.16 |
[프로그래머스] 짝수와 홀수 (JAVA) (0) | 2023.02.07 |