반응형
https://programmers.co.kr/learn/courses/30/lessons/12973
코딩테스트 연습 - 짝지어 제거하기 | 프로그래머스
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들
programmers.co.kr


문자열 파싱으로 작업하면, 1,000,000이라는 문자열 길이 때문에 시간초과가 나는 문제.
stack 자료구조로 문자열의 앞에서부터 값을 집어넣고, 남은 문자열의 맨 앞단과 스택의 가장 윗값을 비교하면 해결할 수 있다.
deque 라이브러리로 popleft를 활용했는데, 일반 리스트를 활용한 것보다 처리속도가 빠르다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from collections import deque | |
def solution(s): | |
s = deque(list(s)) | |
stack = [] | |
stack.append(s.popleft()) | |
while s: | |
# stack이 비었으면 삽입 | |
if len(stack) == 0: | |
stack.append(s.popleft()) | |
# 스택 맨 앞값과 남은 string의 맨 앞 비교. | |
# 같을 경우 stack과 s에서 둘 다 제거한다. | |
elif stack[-1] == s[0]: | |
stack.pop() | |
s.popleft() | |
else: | |
# 값이 다르면, stack에 다음 string의 맨 앞 값을 넣는다. | |
stack.append(s.popleft()) | |
# stack에 값이 남아 있으면 짝지어 제거하기 실패한 것. | |
if len(stack) != 0: | |
return 0 | |
else: | |
return 1 |

반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 백준 15686. 치킨 배달 (0) | 2019.11.02 |
---|---|
[Python] 프로그래머스. 배달 (Level 3) (0) | 2019.11.01 |
[Python] 프로그래머스. 가장 먼 노드 (Level 3) (0) | 2019.10.30 |
[Python] 백준 17142. 연구소 3 (0) | 2019.10.29 |
[Python] 프로그래머스. 2018 카카오 Recruit - 추석 트래픽 (0) | 2019.10.28 |