티끌모아 태산

짝지어 제거하기 본문

프로그래머스/Level 2

짝지어 제거하기

goldpig 2024. 5. 17. 11:46
728x90

문제 설명

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

예를 들어, 문자열 S = baabaa 라면

b aa baa → bb aa → aa 

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

제한사항

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

핵심 아이디어

이 문제는 stack을 활용해서 풀 수 있다. 스택에 아무것도 없으면 문자를 더 해 주고 스택의 맨 위 문자열과 삽입할 문자열을 비교해서 삽입 또는 삭제를 해주면 된다. 이렇게 반복후 스택이 비어있으면 0, 비어있지 않으면 1을 출력해주면 된다.

코드 구현

def solution(s):
    # stack을 활용해서 풀자
    stack = []
    stack.append(s[0]) # 비교를 위해 첫번째 원소를 미리 삽입한다.
    for i in range(1, len(s)):
        if len(stack) == 0: # 스택이 비어있는지 확인
            stack.append(s[i]) # 비어있으면 요소 삽입
        elif stack[-1] != s[i]: # 비어 있지 않으면 비교한다/
            stack.append(s[i]) # 다르면 삽입
        else: # 같으면 스택에서 제거한다.
            stack.pop()
    if len(stack) == 0: # 반복문 탐색 후 스택이 비어 있으면 1
        answer = 1
    else: # 스택이 비어있지 않으면 0을 출력
        answer = 0
    return answer
728x90

'프로그래머스 > Level 2' 카테고리의 다른 글

⭐카펫  (0) 2024.05.17
피보나치 수  (0) 2024.05.16
다음 큰 숫자  (0) 2024.05.16