본문 바로가기

알고리즘 삽질장

[프로그래머스] 짝지어 제거하기

반응형


문제설명

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

 

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

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

programmers.co.kr

사고과정

  • 같은 알파벳이 2개 연속으로 있는 것을 제거해야 한다는 점에서 스택을 이용해야 하는 문제라는 게 감이 팍 왔다.
  • 그래서 연습장에 스택으로 어떻게 구현해야 할지 고민하는 시간을 가졌다. 몇 번의 시행착오 끝에 주어진 문자열 s 원소를 loop로 돌면서 스택이 비어있거나 스택 마지막 원소가 현재 돌고 있는 원소랑 동일하지 않으면 스택에 넣어준다. 이 말은 곧 같은 알파벳이 2개 연속으로 있지 않다는 것을 의미!
  • 하지만 현재 루프돌고 있는 원소가 스택의 마지막 원소랑 동일하다면 그 원소도 넣지 않고 스택의 마지막 원소를 pop해준다.
  • 이런 과정을 수행하면서 루프를 모두 돌고 난 후, 스택에 아무런 원소가 없다고 한다면 그것은 짝지어 제거하기 규칙을 통해서 문자열 전체를 다 제거하는 데 성공한 것이므로 1을 반환하고 스택에 원소가 1개라도 있다면 제거하는 데 성공하지 못한 것이므로 0을 반환해주면 된다!
  • 점점 스택에 익숙해지고 있다! 문제 유형이 명시되어 있지 않았는데 스스로 스택 유형이라는 걸 캐치했다!(스택에 약했는데 그래도 점점 나아지는 듯 하다)

풀이

def solution(s):
    stack = []
    for x in s:
        if not stack or x != stack[-1]:
            stack.append(x)
        elif x == stack[-1]:
            stack.pop()
    
    if stack:
        return 0
    else:
        return 1
반응형