코딩테스트 연습/프로그래머스

[Python] 프로그래머스 코딩테스트 연습 LV2 - 짝지어 제거하기

환타몬 2022. 2. 14. 13:05

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

 

코딩테스트 연습 - 짝지어 제거하기

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙

programmers.co.kr

 

while문으로해서 문자열을 비교한 후, replace 함수를 이용해서 해당하는 문자열을 삭제하는 로직으로 접근하려 한다.

 

My A  ( 시간 초과 ):  

def solution(s):
    answer = -1

    i = 0
    while i<len(s)-1: 
        if (s[i:i+1]==s[i+1:i+2]):
            s = s.replace(s[i:i+2],'')
            i = 0   
        else : 
            i += 1
    
    if s :
        return 0
    else :
        return 1

    return answer

로직 자체는 틀린 것 같진 않으나, 아무래도 i를 자꾸 0으로 초기화시키다보니 데이터가 많아질수록 불필요한 탐색이 많아져 시간 초과 에러가 나는 것 같다.

 

 

 

Other A:

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

 

스택 리스트를 만들어서 스택과 문자열을 비교하고, 해당 문자열과 일치하면 스택에서 삭제하고, 그렇지 않으면 스택에 쌓여서 비교하는 로직이다.