[ Programmers / CodingTest / Python ] 올바른 괄호

황승환·2022년 1월 15일
0

Python

목록 보기
94/498

문제 설명

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

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

s		answer
"()()"		true
"(())()"	true
")()("		false
"(()("		false

입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.

접근 방법

며칠전에 풀었던 괄호 문제보다 확실히 쉬운 문제였기 때문에 그 풀이법을 떠올리며 풀어보았다. 우선 괄호의 처리는 스택의 처리와 같다는 것을 기억해야 한다. 이 문제 역시 스택을 이용하여 해결하였다. 우선 s를 리스트로 만들어주고, s_list를 pop하여 임시 변수에 저장해준다. 임시변수가 만약 닫는 괄호라면 stack에 저장해주고 닫는 괄호가 아닐 경우 stack이 비어있다면 짝이 맞지 않는 것이므로 False를 반환하고, stack이 비어있지 않다면 stack을 pop해준다. 여기서 stack에는 닫는 괄호만 들어가게 되는 것이다.

  • 닫는 괄호를 담아 둘 스택 배열 stack을 선언한다.
  • s를 리스트로 바꿔 s_list에 저장한다.
  • s_list의 길이만큼 반복하는 i에 대한 for문을 돌린다.
    -> s_list를 pop하여 임시변수 tmp에 저장한다.
    -> 만약 tmp가 닫는 괄호일 경우 stack에 넣어준다.
    -> 만약 tmp가 여는 괄호일 경우 stack이 비어있다면 False를 반환하고, stack이 비어있지 않다면 stack을 pop해준다.
    (stack이 비어있는 경우: 여는 괄호가 더 많은 경우)
  • 만약 stack이 비어있지 않다면 False를 반환한다. (stack이 비어있지 않은 경우: 닫는 괄호가 더 많은 경우)
  • True를 반환한다.

solution.py

def solution(s):
    stack=[]
    s_list=list(s)
    for i in range(len(s_list)):
        tmp=s_list.pop()
        if tmp==')':
            stack.append(tmp)
        else:
            if not stack:
                return False
            else:
                stack.pop()
    if stack:
        return False
    return True

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글