본문 바로가기

Algorithm/코딩테스트 고득점 Kit

[고득점 Kit / 스택&큐] 올바른 괄호

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

 

프로그래머스

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

programmers.co.kr

 

필자는 이 문제를 다음과 같이 풀었다.

 

1. 반복문을 돌면서 원소값이 '(' 라면 cnt에 1을 더해주고, ')'라면 cnt에 1을 빼준다.

 

2. cnt가 음수가 나오는 순간 반복문을 멈추고 False를 리턴한다.

 

3. 음수가 아니라면 cnt가 계산되어 반복문을 빠져나온다. 이 때 cnt = 0이라면 True를, 그 외라면(cnt > 0) False를 반환한다. 왜냐하면 cnt = 0이어야만 '('과 ')'가 같은 수만큼 나온 것이기 때문에. 그 이외의 경우는 전부 False다. 

 

이것을 코드로 나타낸 것이 아래의 코드다.

 

def solution(s):
    s_list = list(s)
    cnt = 0

    for i in range(len(s_list)):
        if s_list[i] == '(':
            cnt += 1
        else:
            cnt -= 1
            if cnt < 0:
                return False
                break

    if cnt == 0:
        return True
    else:
        return False

 

 

정답은 맞지만, 뭔가 코드가 지저분해 보여서 좀 정리해봤다.

 

def solution(s):
    cnt = 0
    for char in s:
        cnt += 1 if char == '(' else -1
        if cnt < 0:
            return False
    return cnt == 0