코딩테스트/기출
[스택 / 프로그래머스] 12973번 : 짝지어 제거하기
ydin
2022. 9. 11. 11:43
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12973
Lv2. 문제다!
문제 이해
반복되는 두개의 문자를 지워가면서 문자열이 다 지워지면 1을 출력하고, 그렇지 않으면 0을 출력한다
stack 리스트에 s의 문자들을 삽입하는데, 만약 추가하는 문자와 -1 인덱스의 문자가 같다면 문제의 조건을 만족하므로
pop()으로 -1 인덱스를 꺼낸다
아니라면 그냥 추가만한다
s의 문자가 모두 없어졌으면 1을, 아직 남은 문자가 있다면 0을 출력한다
- 정답 풀이 :
def solution(s):
stack = []
for c in s:
if not stack:
stack.append(c)
else:
if stack[-1] == c:
stack.pop()
else:
stack.append(c)
if stack:
return 0
return 1
- 시도해본 풀이 :
이렇게 하면 30%만 맞는다
같은 문자 두개 반복되는 경우는 어떻게 식별할 수 있는데 이제 0이 출력되는 경우는 어떻게 판별해야하나 아이디어가 떠오르지 않았다.
그러다가 나도 stack을 이용하는 걸 생각했었는데 아직 다루는 방법이 미숙한 것 같다
def solution(s):
s= list(s)
i = 1
flag = True
n = len(s)
while True :
if i == n // 2:
flag = False
break
if len(s) == 0:
break
if s[i - 1] == s[i]:
s = s[ : i - 1] + s[i + 1 :]
i = 1
else:
i += 1
if not flag:
return 0
else:
return 1