hye-log

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

CodingTest/Programmers

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

iihye_ 2022. 9. 17. 18:11

0. 문제 링크

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

 

프로그래머스

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

programmers.co.kr

1. 문제 설명

1) 주어진 문자열에서 왼쪽 괄호와 오른쪽 괄호의 짝이 맞는지 확인

 

2. 입출력

# input
s = "()()"

# output
answer = True

 

3. 코드

1) 첫 번째 코드

순수하게 문제의 조건에 맞게 왼쪽 괄호와 오른쪽 괄호를 stack에 append, pop 하는 방식

def solution(s):
    stack = []

    for i in range(len(s)):
        if s[i] == '(':                     # 왼쪽 괄호이면
            stack.append('(')               # 스택에 추가
        else:                               # 오른쪽 괄호이면(문제에서 문자열은 괄호 2종류만 나옴)
            if not stack:                   # 스택이 비어 있으면
                return False                # pop 할 괄호가 없으므로 return False
            else:                           # 스택이 있으면
                stack.pop()                 # pop

    return True if not stack else False     # 스택이 비어 있으면 return True, 스택이 있으면 닫히지 않았으므로 False

 

실행 결과

정확성 테스트 면에서 시간 효율이 좋음

 

2) 두 번째 코드

문자열은 왼쪽 괄호나 오른쪽 괄호만 나오므로 check 변수의 integer value를 이용하는 방식

def solution(s):
    check = 0

    for i in range(len(s)):
        if s[i] == '(':                     # 왼쪽 괄호이면
            check += 1                      # check에 1 증가
        else:
            if check < 1:                   # check가 1보다 작으면(왼쪽 괄호가 등장하기 전)
                return False                # 왼쪽 괄호가 없으므로 return False
            else:                           # check가 양수이면
                check -= 1                  # check에 1 감소

    return True if check == 0 else False    # check가 0이면 return True, 값이 있으면 False

 

실행 결과

정확성 테스트 면에서 두 번째 코드보다 시간이 걸리지만, 효율성 테스트에서 우수함

 

4. 알게된 점

1) stack의 append, pop

stack = []

stack.append('a')		# stack에 요소 추가
print(stack)
>> ['a']

stack.pop()				# stack에 요소 빼기
print(stack)
>> []

 

5. Github

https://github.com/iihye/Algorithm/blob/main/Programmers/find_parenthesis.py

 

GitHub - iihye/Algorithm

Contribute to iihye/Algorithm development by creating an account on GitHub.

github.com

 

728x90
Comments