짝지어 제거하기

zzwwoonn·2022년 6월 20일
0

Algorithm

목록 보기
57/71

첫 번째 풀이

=> 시간 초과

# S = baabaa 라면
# b aa baa → bb aa → aa → '' => 1 
# S = "baabaa"
S = "cdcd"
# S = cdcd	=> 더 이상 못 없애 => 0

def solution(s):
    answer = -1

    while True:
        if len(s) == 0:
            return 1

        for i in range(len(s)-1):
            # input()
            # print("i = ", i)
            # print("s[i] = ", s[i], " s[i+1] = ", s[i+1])
            if s[i] == s[i+1]:
                s = s[:i] + s[i+2:]
                print(s)
                break
            # print("len(s)-2 = ", len(s)-2)
            if i == len(s)-2:
                return 0

print(solution(S))

두 번째 풀이

# S = baabaa 라면
# b aa baa → bb aa → aa → '' => 1 
from collections import deque


# S = "baabaa"
S = "cdcd"
# S = cdcd	=> 더 이상 못 없애 => 0

def solution(s):
    answer = -1

    L = []
    L.append(s[0])
    
    for i in range(1, len(s)):
        # print("i = ", i)
        # print("L = ", L)
        # print("L[-1] = ", L[-1], " s[i] = ", s[i])
        if not L:
            L.append(s[i])
            continue
        if L[-1] != s[i]:
            L.append(s[i])
            continue
        else:
            L.pop()
    if L:
        return 0
    else:
        return 1


print(solution(S))

s를 순회하면서 원소 하나씩 차례대로 L 에다가 넣어준다.
=> 모든 s를 돌았을 때 L에 어떤 원소라도 있으면 0 리턴
=> 모든 s를 돌았는데 L이 비어있으면 1 리턴

s[i] 즉, 넣으려고 하는 원소랑 현재 L 안에 있는 젤 마지막 원소, 즉 [-1]의 원소랑 비교해서 같으면 L에서 pop 해주고 다르면 append 해준다.

0개의 댓글