본문 바로가기
Algorithm/Programmers

[Programmers / Level2] 짝지어 제거하기

by 개복취 2024. 1. 19.

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

 

프로그래머스

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

programmers.co.kr


<내코드>

def solution(s):
    s_list = list(s)
    idx = 0
    while True:
        if idx == len(s_list): break
        if idx >= 1 and (s_list[idx] == s_list[idx-1]):
            del s_list[idx-1:idx+1]
            idx = 0
            continue
        idx += 1
        
    if not s_list: return 1
    return 0

 

-> 단순하게 문자열리스트 순회를 통해 같은 문자가 있다면 del()메소드를 통해 없애고 처음으로 돌아오고 반복하는 작업을 진행해주었다.

근데 시간초과로 인해 테스트를 통과하지 못했다.. 당연하게도 O(n)을 여러번 굴리는데 시간초과가 안 날수 없었다.

 

이번에도 gpt선생님한테 여쭤보니 stack을 통해 짝이 맞는지 체크하라고 하신다.

다시 문제를 톺아보니 흔한 paranthesis 괄호문제와 동일한 부분이 보였다.

뚝배기 아프다.

 

<정해코드>

def solution(s):
    stack = []
    for char in s:
        if stack and stack[-1] == char: stack.pop()
        else: stack.append(char)
    if stack: return 0
    return 1