📜 접근 방법
stack으로 접근하기
- 바로 앞 문자열과 현재 문자열과 비교하여 같을 경우
- 바로 앞 문자열과 현재 문자열과 비교하여 같을 때까지 반복한다.
- stack에 문자와 갯수를 +1 하여 넣어준다.
- 같지 않을 경우 m개 이상인지 확인 후 pop한다.
- 바로 앞 문자열과 현재 문자열과 비교하여 같을 때까지 반복한다.
- 바로 앞 문자열과 현재 문자열과 비교하여 다를 경우
- stack에 문자와 갯수를 1하여 넣어준다.
❌ 실패 코드
m개 이상이면 제거해야하는데 m개일 경우에만 제거를 했다.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
user_input = input()
i = 0
while i < len(user_input) - m:
idx = user_input.find(user_input[i] * m)
if idx > 0:
user_input = user_input[:idx] + user_input[idx + m:]
i = 0
else:
i += 1
if user_input == '':
print('CLEAR!')
else:
print(user_input)
✅ 정답 코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
user_input = input().rstrip()
stack = []
# 비교하기 위해 추가
stack.append(('', 1))
# IndexError 방지하기 위해 안쓰는 문자 추가
user_input += 'z'
for c in user_input:
if stack[-1][0] != c:
if m <= stack[-1][1]:
# 삭제할 값
top = stack[-1][0]
while top == stack[-1][0]:
stack.pop()
if stack[-1][0] == c:
stack.append((c, stack[-1][1] + 1))
else:
stack.append((c, 1))
stack.pop()
if len(stack) > 1:
for c, cnt in stack:
print(c, end='')
else:
print('CLEAR!')
💡알게 된점
'코딩테스트 > Python' 카테고리의 다른 글
[python 구름] 직사각형 만들기 (0) | 2023.05.19 |
---|---|
[python 구름] 거스름돈 (0) | 2023.05.17 |
[python 구름] 체크 카드 (0) | 2023.05.15 |
[python 구름] Stack (0) | 2023.05.15 |
[python 구름] 개미와 진딧물 (0) | 2023.05.14 |