문제 - 0과 1


  • 0과 1로만 이루어진 문자열 S가있다. S는 임의의 위치에서 0과 1이 붙어 있을 경우 두개의 문자열을 짝지어서 제거할 수 있다.

  • 예를 들어서 “1011” 이라는 문자열이 있으면 첫 번째 문자 1과 두번째 문자 0을 짝지어서 제거하면 “11"만 남게 된다.

  • 제거한 후에 연결된 새로운 문자열에서 짝이 생길경우 반복하여 제거할 수 있다.

  • 문자열이 주어질 때 짝지어서 제거하여 만들 수 있는 문자열 중에 가장 짧은 문자열의 길이를 반환하라.

제한 사항


  • 문자열의 길이는 100,000 이하의 자연수이다.
  • 문자열은 0과 1로만 이루어져 있다.

아이디어


  • 스택에 문자열을 순차대로 넣는다.
  • 만약 스택에 문자열이 있으면 하나 꺼내서 앞으로 넣을 문자열이랑 같으면 그냥 넣는다.
  • 아니라면 기존에 있는 문자열을 꺼낸다.

코드


def solution(s: str) -> int:
    s = list(s)
    stack = []
    for ch in s:
        if len(stack) == 0:
            stack.append(ch)
            continue

        if stack[-1] == ch:
            stack.append(ch)
        else:
            stack.pop()


    return len(stack)

참고 문헌


>> Home