문제
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):
stack = []
for i in s:
if len(stack) == 0: # stack이 비어있다면 push()
stack.append(i)
elif i == stack[-1]: # stack의 마지막 값이 i와 같다면 꺼냄
stack.pop()
else: # stack 마지막 값과 i가 다르면 push()
stack.append(i)
if len(stack) == 0:
return 1
else:
return 0
설명
stack 이용!
처음에는 split 해서 list 로 받고 반복문을 돌며 각 요소들을 탐색해서 앞,뒤 값이 같으면 list.remove 를 하려고 했다. 이 과정에서 계속해서 list index 초과가 나타나서 이렇게 풀면 안되겠다는 생각이 났다. 문득 stack으로 풀어야 하겠구나 싶었다. 그치만 관련해서 까먹어서 다시 한번 정리한다.
cf) 두 번째 풀었을때: for문 안에 if문들의 조건들!
* stack 관련 함수들
append: 뒤에 쌓음
stack[-1]: stack 맨 위의 값 확인
pop(-1): 맨 뒤의 값 꺼냄
* stack 문제 유형
1. 아이템들이 쌍을 이뤄서 사라지게 하는 유형
⇒ 값 확인을 제일 최근 것(제일 위의, 제일 오른쪽의, 제일 최근에 쌓은)만 확인하면 될 때
ex) 괄호 열고 닫기
2. 최근 & (조건)
- 그 전의 값을 필요로 하는 문제일 때
'Coding Test > Python' 카테고리의 다른 글
| [프로그래머스] 구명보트 (0) | 2023.06.08 |
|---|---|
| [프로그래머스] 영어 끝말잇기 (0) | 2023.06.08 |
| [프로그래머스] 피보나치 수 (0) | 2023.06.07 |
| [프로그래머스] 숫자의 표현 (1) | 2023.06.07 |
| [프로그래머스] 이진 변환 반복하기 (0) | 2023.06.07 |