STUDY/Algorithm

[프로그래머스] LEVEL2 짝지어 제거하기, python3, 2017 팁스타운

sinawi95 2021. 1. 28. 22:07
728x90
def solution(s):
    if len(s) % 2: #홀수 경우는 불가능
        return 0
    list_s = list(s)
    stack = []
    
    for i in range(len(s)):
        tmp = list_s.pop()
        if stack == []:
            stack.append(tmp)
        elif stack[-1] == tmp:
            stack.pop()
        elif stack[-1] != tmp:
            stack.append(tmp)
    
    if stack != []:
        return 0
    return 1

위 코드는 타인의 코드를 보고 생각해보며 내 방식대로 적은 코드이다.

스택의 개념에 대해서는 알지만 어떻게 사용해야할지 잘 몰랐던 것 같다.

스택이 비었을때 추가하고, 스택에 값이 있을때 비교하는것...

앞으로는 제발 잊지 않았으면 좋겠다.

 


아래는 처음 구현했던 코드이다. 효율성테스트 실패해서 스택을 생각했다.

def solution(s):
    s += '_'
    answer = 0
    ind = 1
    
    while s != '' :
        if s[ind-1] == s[ind]:
            s = s[:ind-1]+s[ind+1:]
            ind -= 1
        else:
            ind += 1
        if ind == len(s):
            break
    else:
        answer = 1
    
            
    return answer

    '''
    정확성  테스트
    테스트 1 〉	통과 (0.01ms, 10.2MB)
    테스트 2 〉	통과 (89.14ms, 10.3MB)
    테스트 3 〉	통과 (157.49ms, 10.5MB)
    테스트 4 〉	통과 (154.87ms, 10.6MB)
    테스트 5 〉	통과 (153.97ms, 10.4MB)
    테스트 6 〉	통과 (155.23ms, 10.5MB)
    테스트 7 〉	통과 (155.63ms, 10.3MB)
    테스트 8 〉	통과 (147.66ms, 10.4MB)
    테스트 9 〉	통과 (0.00ms, 10.2MB)
    테스트 10 〉	통과 (0.04ms, 10.1MB)
    테스트 11 〉	통과 (0.01ms, 10.2MB)
    테스트 12 〉	통과 (0.01ms, 10.2MB)
    테스트 13 〉	통과 (0.01ms, 10.2MB)
    효율성  테스트
    테스트 1 〉	실패 (시간 초과)
    테스트 2 〉	실패 (시간 초과)
    테스트 3 〉	실패 (시간 초과)
    테스트 4 〉	실패 (시간 초과)
    테스트 5 〉	실패 (시간 초과)
    테스트 6 〉	실패 (시간 초과)
    테스트 7 〉	실패 (시간 초과)
    테스트 8 〉	실패 (시간 초과)
    '''