https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 첫 번째 풀이
# 올바른 괄호
# 첫 번째 풀이
def solution(s):
if len(s) % 2 != 0:
return False
elif s[0] == ')' or s[-1] == '(':
return False
else:
error = 0
for i in s:
if i == '(':
error += 1
else:
error -= 1
if error == 0:
return True
else:
return False
'('를 +1, ')'를 -1로 놓고 최종 합이 0이 되면 안 되나?? 하는 생각으로 했지만 몇 가지 케이스에서 틀림. 뭔가 빼먹은 게 있는 것 같지만 리스트를 이용해서 다르게 풀어봄.
- 두 번째 풀이
# 두 번째 풀이
def solution(s):
_list = []
for i in s:
if i == '(':
_list.append(i)
else:
if _list ==[]:
return False
else:
_list.pop()
if len(_list)==0:
return True
else:
return False
정답이긴 하지만.... 뭔가 처음 아이디어로 풀 수 있는 방법이 없을까? 찾다가 다른 사람이 비슷한 아이디어로 푼 풀이를 발견.
- 다른 사람의 풀이
# 다른 사람의 풀이
def solution(s):
x = 0
for w in s:
if x < 0:
break
x = x+1 if w=="(" else x-1 if w==")" else x
return x==0
합이 0이 되게 한다는 건 같지만 중간에 x <0 일 때 break 하는 걸 생각을 못함..... 이런 디테일이 중요한 것이야.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Python] 이진 변환 반복하기 (0) | 2022.11.06 |
---|---|
[Python] 최솟값 만들기 (0) | 2022.11.05 |
[Python] 직사각형 별찍기 & 최대공약수와 최소공배수 (0) | 2022.11.03 |
[Python] JadenCase 문자열 만들기 (0) | 2022.11.02 |
[Python] 부족한 금액 계산하기 & 행렬의 덧셈 (0) | 2022.11.01 |