NIRVANA
[level 2] 올바른 괄호 (다시 풀어보기!) 본문
문제 풀이 접근법1
1) s의 길이보다 하나 작게 for문을 반복한다.
2) 만약 i가 0이고, s의 첫 원소가 )이면 어차피 올바른 괄호가 되지 못함 -> cnt+1
3) i의 원소가 (이고 i+1의 원소가 )이거나 i의 원소가 )이고 i+1의 원소가 )이면 cnt를 +1한다.
4) 3)에서 만약 이미 cnt가 0 이상이었다면
def solution(s):
answer = True
cnt= 0
for i in range(len(s)-1):
if i == 0 and s[i] == ')':
cnt +=1
if s[i] =='(' and s[i+1] == '(':
if cnt > 0:
cnt -=1
else:
cnt+=1
elif s[i] ==')' and s[i+1] == ')':
if cnt > 0:
cnt -=1
else:
cnt+=1
if cnt > 0:
answer = False
return answer
테스트 1, 2, 5, 11번 / 효율성 테스트 2번에서 실패했다..
문제 풀이 접근법2
1) 괄호들을 판단할 리스트 check를 선언한다.
2) s의 원소 i가 '(' 이면 check에 i를 추가한다.
3) 만약 s의 원소가 i가 ')'이면 check의 길이가 0이상인지 확인한다. 만약 0이상이면 괄호가 완성된 것이므로 '('를 pop한다. 만약 0이라면 잘못된 괄호이므로 answer를 False로 변환한다.
4) check의 길이를 확인한다. 만약 0 이상이면 잘못된 괄호, ((가 있는 것이므로 answer를 False로 변환한다.
def solution(s):
answer = True
check = []
for i in s:
if i == '(':
check.append(i)
else:
if len(check) > 0:
check.pop()
else:
answer = False
if len(check) > 0:
answer = False
return answer
✏️스택 문제들을 대부분 리스트를 선언하고, 거기에 데이터를 쌓으면서
이게 옳은 데이터인지 아닌지 판단하는 문제들이 많은 것 같다.
그리고..나는 스택 문제에 약한듯..?
더 연습해야겠다.
'Coding test(Python3) > Programmers' 카테고리의 다른 글
[level 2] 숫자의 표현(다시 풀기!!) (0) | 2023.09.28 |
---|---|
[level 2] 이진 변환 반복 (0) | 2023.09.28 |
[level 2] 최솟값 만들기(규칙 나중에 다시 고민해보기) (0) | 2023.09.16 |
[level 2] JadenCase 문자열 만들기 (0) | 2023.09.16 |
[level 2] 최댓값과 최솟값 (0) | 2023.09.15 |