본문 바로가기
Tests/프로그래머스

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

by 코딩하는 금융인 2021. 4. 4.

문제. 프로그래머스 올바른 괄호


문제 설명

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

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

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

 

제한사항

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

입출력 예시

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

출처 : 프로그래머스 올바른 괄호

 

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

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

programmers.co.kr


나의 풀이 in Python3

#[Programmers] 올바른 괄호
def solution(s):
    ls = list(s)
    stack = []
    for i in ls:
        if i =='(':
            stack.append(i)
        else:
            if len(stack):
                stack.pop()
            else: return False
    return len(stack) ==0

알고리즘 설명

  1. LIFO(Last-IN-First-Out) 개념인 스택 활용
  2. s의 리스트를 for문으로 전개
  3. 값이 '('일 때, stack 리스트에 추가하고 ')'일 때, stack에 들어간 값이 0보다 클 경우 stack.pop()으로 제거하고 짝을 맞춰줌
  4. 아닐 경우에는 짝이 안맞으므로 False 리턴

다른 사람의 풀이

def is_pair(s):
    # 함수를 완성하세요
    x = 0
    for w in s:
        if x < 0:
            break
        x = x+1 if w=="(" else x-1 if w==")" else x
    return x==0

짝에 맞으면 0, 짝이 맞지 않다면 0이 아니게 되므로 올바른 괄호라는 문제에 적합한 코드라고 생각하여 가져왔습니다.

 

※ 괄호 문제는 많은 코딩테스트 문제에서 자주 나오는 단골 문제이므로 잘 정리해야 합니다.

반응형

댓글