코테 노트/프로그래머스

Level 2 올바른 괄호 Python

화요밍 2021. 1. 15. 23:32
728x90
반응형

programmers.co.kr/learn/courses/30/lessons/12909

 

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

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

programmers.co.kr

 

최종 풀이

 

hwayeon351/Programmers-Algorithms

프로그래머스 코딩테스트 풀이. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

def solution(s):
    stack = []
    for i in s:
        if len(stack) == 0:
            if i == ")": return False
            elif i == "(": stack.append(s)
        else:
            if i == "(": stack.append(s)
            elif i == ")": stack.pop()
    
    if len(stack) == 0: return True
    else: return False

 

 


풀이 과정

풀이 시간  14분

 

 이 문제는 Stack을 활용하면 문자열의 길이만큼만 탐색해서 문제를 해결 할 수있다. 이전에 푼 프로그래머스 Level 2 짝지어 제거하기와 비슷하다. 짝지어 제거하기 문제는 아래 참고를 확인하면 된다.

 

Stack 활용하기

 문자열 s의 길이 만큼 다음 과정을 반복한다.

  • len(stack) == 0인 경우,
  1. 문자 i == ")"인 경우는 s 문자열이 ")"로 시작하거나, 이전에 "()"쌍이 있어 stack에서 pop() 한 이후 처음 들어온 문자가 ")"인 경우이다. 이때는, 나머지 문자열을 따져주지 않아도 올바른 괄호가 아니므로 return False 해준다.
  2. 문자 i == "("인 경우는 s 문자열이 "("로 시작하거나, 이전에 "()"쌍이 있어 stack에서 pop() 한 이후 처음 들어온 문자가 "("인 경우이다. 이때는, 다음 ")"가 들어와서 pop() 해야하므로 stack에 i를 쌓아준다.

 

  • len(stack) != 0인 경우,
  1. i == "("인 경우, stack에 i를 쌓아준다.
  2. i == ")"인 경우, stack의 top에 있는 "("를 pop() 해준다.

for문이 끝난 후, len(stack) == 0인 경우, 문자열 s가 올바른 괄호이므로 True를, 아니면 False를 반환한다.

 

 

 


참고

 

[STL] Stack

Stack은 LIFO(Last In First Out, 후입선출)의 자료구조이다. C++의 표준 템플릿 라이브러리로 정의되어 있다. #include 기본 함수 top() Stack의 가장 위의 원소를 반환 push(element) top에 원소 추가 pop() to..

hwayomingdlog.tistory.com

 

Level 2 짝지어 제거하기

programmers.co.kr/learn/courses/30/lessons/12973?language=python3 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파..

hwayomingdlog.tistory.com

 

728x90
반응형