Recent Posts
Recent Comments
Link
Today
Total
02-09 01:44
관리 메뉴

Hippo's data

[프로그래머스] 올바른 괄호 Python 풀이 본문

Algorithm/프로그래머스(programmers)

[프로그래머스] 올바른 괄호 Python 풀이

Hippo's data 2024. 1. 25. 01:25
728x90

프로그래머스(Programmers) 올바른 괄호 문제

난이도 : Level 2

<문제 링크>

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

레벨2의 제법 난이도 있는 문제지만

2가지 방법으로 쉽게 해결할 수 있다

1. 스택구조 활용

2. 등장횟수 기록 

 

 

1. 스택구조 활용

먼저 스택(stack)구조를 이용하여 문제를 수월하게 해결할 수 있다

( 기호가 들어온 후 ) 기호가 들어오면 ( 기호를 지우는 과정을 반복한 후

스택에 남은 기호가 없으면 올바르게 매칭 된것이므로 True

남은 기호가 있으면 제대로 매칭이 안되므로 False 출력

def solution(s):
    # 스택 생성
    stack = []
    answer = True
    # ( 들어오고 )이 등장하면 (기호를 삭제하며 최종 스택에 남은 기호 개수로 판단
    for i in s:
        if i == '(':
            stack.append(i)
        elif i == ')':
            # )차례인데 기존 스택이 비어있디면 false출력후 반복문 멈춤
            if len(stack) == 0 :
                answer = False
                break
            stack.pop()
    # 최종적으로 스택에 기호가 남아있다면 false
    if len(stack) >0:
        answer= False
    return answer

 

 

 

2. 등장횟수 기록 

(, ) 두 기호의 등장횟수를 기록해서 문제를 해결할 수 있다

괄호가 올바르게 쓰이지 않은 경우는 2가지가 있다

1. ( 가 나오지 않았는데 )나온 경우

2.  (, ) 두 기호의 개수가 다른 경우

-> 두 조건을 고려하여 문제를 해결하면 된다!! 

# 스택 미사용 해결 / 기록해서 해결하기
def solution(s):
    answer = True
    # 개수 기록할 변수 생성
    dap = 0
    # '('는 +1 ')'는 -1을 해주며 반복
    for i in s:
        if i == '(':
            dap +=1
        else:
            dap -=1
        # ( 가 나오지 않았는데 )나온 경우 음수이므로 이 경우 False 반환
        if dap <0 :
            answer = False
    # (, ) 개수가 다른 경우 False 반환
    if dap != 0:
        answer = False
    return answer
728x90