본문 바로가기
코딩테스트/Python

[python 구름] 1차원 뿌요뿌요

by nahkim 2023. 5. 16.

📜 접근 방법

stack으로 접근하기

  1. 바로 앞 문자열과 현재 문자열과 비교하여 같을 경우
    1. 바로 앞 문자열과 현재 문자열과 비교하여 같을 때까지 반복한다.
      1. stack에 문자와 갯수를 +1 하여 넣어준다.
    2. 같지 않을 경우 m개 이상인지 확인 후 pop한다.
  2. 바로 앞 문자열과 현재 문자열과 비교하여 다를 경우
    1. 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