평범한 필기장

[Programmers_Python] 짝지어 제거하기 본문

코딩 테스트 준비/Programmers

[Programmers_Python] 짝지어 제거하기

junseok-rh 2023. 3. 27. 17:53

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

내가 생각한 풀이방식

나는 연속된 문자가 나타나면 제거하고 제거되고 남은 문자들을 이어붙이는 방식으로 풀려고 했다. 아래 코드와 같이 푸니까 시간초과가 났다. Stack 자료구조를 이용할 생각을 못했다.

def solution(s):
    while True:
        if len(s) == 0:
            return 1
        bf_s = str(s)
        for i in range(len(s) - 1):
            if s[i] == s[i+1]:
                if i == 0:
                    s = s[i+2:]
                    break
                elif i == len(s) - 1:
                    s = s[:i]
                    break
                else:
                    s = s[:i] + s[i+2:]
                    break
        if bf_s == s:
            return 0

올바른 풀이방식

문자열 앞에서부터 하나씩 Stack에 넣는데 Stack의 마지막 문자와 넣으려는 문자가 같으면 Stack에 넣지 않는다. 문자열에 있는 문자에 대해 모두 반복을 마치고 나서 Stack에 문자가 남아있으면 0을 없으면 1을 return하게 한다.

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

 

Stack 자료구조를 배웠음에도 이용하지 못했다. 아직 경험이 부족해서 그런지 내가 아는 것들을 다 이용하지 못하는 것 같다. 꾸준히 해서 생각하는 폭을 넓혀야겠다.