NIRVANA

[level 2] 올바른 괄호 (다시 풀어보기!) 본문

Coding test(Python3)/Programmers

[level 2] 올바른 괄호 (다시 풀어보기!)

녜잉 2023. 9. 17. 17:39

 

 

문제 풀이 접근법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

 

✏️스택 문제들을 대부분 리스트를 선언하고, 거기에 데이터를 쌓으면서

이게 옳은 데이터인지 아닌지 판단하는 문제들이 많은 것 같다.

 

그리고..나는 스택 문제에 약한듯..? 

더 연습해야겠다.


참고:https://velog.io/@ssongplay/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%98%AC%EB%B0%94%EB%A5%B8-%EA%B4%84%ED%98%B8-Python

 

[프로그래머스] 올바른 괄호 (Python)

프로그래머스 - 올바른 괄호테스트5와 테스트11을 통과하지 못했다. ㅠㅠ 내가 너무 단순하게 생각한 듯 하다. 검색해보니 스택을 사용하면 되는 것 같았다. 힌트를 얻은 뒤 다시 시도해보았다.

velog.io