짝지어 제거하기

Eunseo·2022년 5월 2일
0

Programmers

목록 보기
5/9
post-thumbnail

짝지어 제거하기 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/12973?language=python3

Summary
스택의 기본 개념 이해 문제


Description

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.
예를 들아. 문자열 S = baabaa 라면

b aa baa → bb aa → aa →
의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.

[제한 사항]

  • 문자열의 길이 : 1,000,000이하의 자연수
  • 문자열은 모두 소문자로 이루어져 있습니다.

[입출력 예]

numbersreturn
baabaa1
cdcd0

Checking List

  • 혼자서 문제를 해결
  • 힌트를 보고 해결
  • 답을 보고 해결

My Answer

  • 정확성: 통과
  • 효율성: 통과
  • 해설
    1. 입력 문자열 반복문을 통해 순서대로 탐색한다.
    2. 탐색한 순서대로 스택에 문자를 쌓는다.
    3. 스택에 제일 나중에 쌓인 문자와 현재 탐색중인 문자를 비교해서 중복 여부를 확인한다.
    4. 중복이 되면 pop하여 스택에서 제거한다.
    5. 탐색을 마친 후, stack이 비었다면 1, 그렇지 않다면 0을 반환한다.
def solution(s):
    stack = []
    for c in s:
        if not stack:
            stack.append(c)
        else:
            if stack[-1] != c:
                stack.append(c)
            else:
                stack.pop(-1)
    if stack:
        return 0
    else:
        return 1

Answer Sheet

  • 좋아요가 가장 많았던 코드
def solution(s):
    answer = []
    for i in s:
        if not(answer):
            answer.append(i)
        else:
            if(answer[-1] == i):
                answer.pop()
            else:
                answer.append(i)    
    return not(answer)

출처: 다른사람의풀이


Trial & Error

  • X

Takeaway

  • 스택의 가장 기본적인 개념을 적용해서 풀 수 있는 문제였다.

  • 후입선출이라는 특징을 중복 제거라는 문제에 적용할 수 있다는 점에서, 알고리즘을 단순히 이해하는 것 이상으로 잘 활용할 수 있어야 한다는 것을 느끼게 해준 문제였다.


profile
내가 공부한 것들

0개의 댓글