[프로그래머스] 짝지어 제거하기 (Python)

[프로그래머스] 짝지어 제거하기

풀이(시간초과)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#시간초과
def solution(s):
    i = -1

    while True:
        i += 1
        if i == len(s) - 2:
            break
        elif s[i] == s[i + 1]:
            s = s[:i] + s[i + 2:]
            i = -1
            if len(s) == 2:
                return 1

    return 0

문자열 slice를 이용하여 구현하였을 때 반복문 횟수의 증가로 효율성 테스트에서 시간초과 문제가 발생했다.


풀이(시간초과 해결)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(s):
    stack = []

    for i in range(len(s)):
        if len(stack) == 0:
            stack.append(s[i])
        elif s[i] == stack[-1]:
            stack.pop()
        else:
            stack.append(s[i])

    if len(stack) == 0:
        return 1
    else:
        return 0

💡 stack 구조 활용

  • 알파벳의 짝을 찾은 경우 pop()으로 제거&아닌 경우 append()로 넣는 과정 반복
  • 마지막에 stack의 길이가 0인 경우 ➔ 짝지어 제거하기 성공적으로 수행 가능