본문 바로가기
*Algorithm/Programmers_Level2

[programmers] 프로그래머스 Level2 올바른 괄호(파이썬 Python)

by codinguser 2020. 11. 16.

프로그래머스
(주)그렙

 

[programmers] 프로그래머스 Level2 올바른 괄호

(파이썬 Python)

 

* 문제출처 : 프로그래머스 코딩 테스트 연습, 알고리즘 문제

 

 

 

1) 문제


프로그래머스 올바른 괄호

 

코딩테스트 연습 - 올바른 괄호

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 ()() 또는 (())() 는 올바른 괄호입니다. )()( 또는 (()( 는 올바르지 않은 괄호

programmers.co.kr

 

 

 

 

 

2) 풀이 과정


 

1. '('가 들어오면 stack의 개수를 증가

 

2.  만약 ')'가 있는 상황에서

ㄴ 위에서 저장한 '('를 꺼내면서 개수를 빼준다.

ㄴ 문자 ')'가 '('보다 많게 된다면, 이것 역시 false

 

3. 1,2를 모두 순회하고 나서, stack_count 가 0이 아니라면?

= '('과 ')'의 균형이 안맞는 경우 이니까 이 때도 false

 

 

 

 

 

< < 사고 과정 > >


 

쌍을 이루는 문제다. 스택개념을 써서 push() 개념과 pop()개념을 이용하자.

Why? 쌍을 이룰 때, 나중에 들어 온게 먼저 나가야지만 순서쌍을 이룰 수 있을거라 판단.

(빨 - > 파 - > 검) 순서의 예

 

가장 기본이 되는 순서 : (가 먼저 들어오고 )으로 쌍을 맞춘다.

 

 

Why 스택을 사용?

)가 들어오면 순서쌍에 맞게 (를 빼주기 위해

 

 

 

 

 

 

3) 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def solution(s):
    answer = True
    
    stack_count = 0
    
    for c in s:
        if(c == '('):
            stack_count += 1
        elif(c == ')'):
            stack_count -= 1
            
            if(stack_count < 0) :
                answer = False
    
    if(stack_count != 0):
        answer = False
    
    return answer
cs

 

 

 

 

 

4) 정리 노트


X

 

 

댓글