코딩테스트 연습 > 2017 팁스타운
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.
예를 들어, 문자열 S = baabaa 라면
b aa baa → bb aa → aa →
의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.
- 문자열의 길이 : 1,000,000이하의 자연수
- 문자열은 모두 소문자로 이루어져 있습니다.
| s | result |
| baabaa | 1 |
| cdcd | 0 |
입출력 예 #1
위의 예시와 같습니다.
입출력 예 #2
문자열이 남아있지만 짝지어 제거할 수 있는 문자열이 더 이상 존재하지 않기 때문에 0을 반환합니다.
문제 풀이
이런 문자열 문제는 while, stack을 떠올리는 것이 좋을 것 같다. 이전에 풀었던 큰수만들기 문제가 생각났다.
2026.05.15 - [Algorithm Solving] - [프로그래머스] LV2. 큰수 만들기 (파이썬, Python)
[프로그래머스] LV2. 큰수 만들기 (파이썬, Python)
문제 링크 구분코딩테스트 연습 > 탐욕법(Greedy) 문제 설명어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.예를 들어, 숫자 1924에서 수 두 개를 제거하면 [1
nomad1jin.tistory.com
stack top과 현재 문자열이 같으면 stack 탑을 빼고, 같지 않은 경우에는 더하는 방식으로 while문을 진행했다.
def solution(s):
# 탑과 지금 넣는게 같으면 빼기
stack = []
stack.append(s[0])
i = 1
while i < len(s):
if stack and stack[-1] == s[i]:
stack.pop()
answer = 1
else :
stack.append(s[i])
i += 1
if stack:
answer = 0
return answer
다른 사람의 풀이도 살펴보았는데, 해당 조건문이 더 깔끔한것같다.
- 스택이 비었으면 추가하기
- 탑과 문자가 같으면 pop()
- 같지 않으면 append()
def solution(s):
answer = []
for i in s:
if not(answer):
answer.append(i)
else:
if(answer[-1] == i):
answer.pop()
else:
answer.append(i)
return not(answer)
'Algorithm Solving' 카테고리의 다른 글
| [프로그래머스] LV2. 귤 고르기 (파이썬, Python) (0) | 2026.05.28 |
|---|---|
| [프로그래머스] LV2. 카펫 (파이썬, Python) (0) | 2026.05.28 |
| [프로그래머스] LV2. 구명보트 (파이썬, Python) (0) | 2026.05.23 |
| [프로그래머스] LV2. 올바른 괄호 (파이썬, Python) (1) | 2026.05.21 |
| [프로그래머스] LV1. 햄버거 만들기 (파이썬, Python) (0) | 2026.05.17 |