본문 바로가기
Data structure & Algorithm/Programmers

[Programmers] 짝지어 제거하기 (Python)

by LydiaRyu 2022. 10. 10.
반응형

프로그래머스 레벨 1 짝지어 계산하기 (Python)

 

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

 

프로그래머스

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

programmers.co.kr

 

📒 문제 설명

 

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

 

제한사항

 

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

 

입출력 예시

 

s                   result
baabaa        1
cdcd            0

 

😃 문제 풀이

 

def solution(s):
    answer = 0
    
    # stack을 활용하기 위해 빈 리스트를 생성
    tmp = []
    
    for i in range(len(s)):
        # tmp이 비어있으면, S열의 문자를 추가
        if not tmp:
            tmp.append(s[i])
            
        # tmp이 존재하고, s문자열과 tmp의 마지막 문자가 같으면 동일한 문자이므로 제거    
        elif s[i] == tmp[-1]:
            tmp.pop()
        
        # tmp이 존재하지만, s문자열과 같지 않다면 tmp에 문자 추가
        else:
            tmp.append(s[i])
    
    # tmp이 비어있으면 모든 문자가 동일한 경우        
    if len(tmp) == 0:
        answer = 1
    else: answer = 0
    return answer

 

  • 스택(Stack)을 이용하여 문자가 같은지 다른지 여부를 파악한다. 

스택이란?

 

블록으로 탑을 쌓았다가 빼는 것과 같이 가장 마지막에 쌓은 블록을 가장 먼저 빼는 것이다. (Last In First Out)

스택에 값을 넣을 때는 push, 스택 안에서 값을 뺄 때는 pop이라고 한다.

 

 

 

  • 스택을 사용하기 위해서 빈 문자열 tmp를 만든다. 
  • IF 문을 이용하여

1. tmp가 비어있으면 s에서 문자를 추가하고,

2. tmp와 s 문자가 동일하면 pop을 하여 tmp에서 문자를 제거한다(동일한 문자를 삭제).

3. tmp가 존재 하지만 s 문자와 동일하지 않으면, 문자가 일치하지 않는 경우이므로 tmp에 추가한다.

  • 모든 문자에 대한 검증이 끝난 이후, tmp가 비어있다면 모든 문자가 일치하는 경우이므로 0을 출력하고, 비어 있지 않다면 1을 출력한다.

 

 

 

728x90

댓글