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

 

Lv2. 문제다!

 

문제 이해 

반복되는 두개의 문자를 지워가면서 문자열이 다 지워지면 1을 출력하고, 그렇지 않으면 0을 출력한다 

 

stack 리스트에 s의 문자들을 삽입하는데, 만약 추가하는 문자와 -1 인덱스의 문자가 같다면 문제의 조건을 만족하므로 

pop()으로 -1 인덱스를 꺼낸다 

아니라면 그냥 추가만한다 

 

s의 문자가 모두 없어졌으면 1을, 아직 남은 문자가 있다면 0을 출력한다 

 

- 정답 풀이 : 

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

 

- 시도해본 풀이 :

이렇게 하면 30%만 맞는다

같은 문자 두개 반복되는 경우는 어떻게 식별할 수 있는데 이제 0이 출력되는 경우는 어떻게 판별해야하나 아이디어가 떠오르지 않았다. 

그러다가 나도 stack을 이용하는 걸 생각했었는데 아직 다루는 방법이 미숙한 것 같다 

def solution(s):    
    s= list(s)
    i = 1
    flag = True
    n = len(s)
    while True :
        if i == n // 2:
            flag = False
            break
        if len(s) == 0:
            break            
        if s[i - 1] == s[i]:
            s = s[ : i - 1] + s[i + 1 :]
            i = 1
        else:
            i += 1
            
    if not flag:
        return 0 
    else: 
        return 1

+ Recent posts