728x90
다른 사람의 풀이
def solution(number, k):
# stack에 입력값을 순서대로 삽입
stack = [number[0]]
for num in number[1:]:
# 들어오는 값이 stack 값보다 크면, 기존의 값을 제거하고 새로운 값으로 바꿈
# 참고 : len(stack) > 0 == stack
while len(stack) > 0 and stack[-1] < num and k > 0:
# 값을 한개 빼서 k는 1이 제거
k -= 1
# 내부의 값을 제거
stack.pop()
# 새로운 값을 삽입
stack.append(num)
# 만일 충분히 제거하지 못했으면 남은 부분은 단순하게 삭제
# 이렇게 해도 되는 이유는 이미 큰 수부터 앞에서 채워넣었기 때문
if k != 0:
stack = stack[:-k]
return ''.join(stack)
Stack을 이용
while문의 역할이 중요하다
stack 조건을 stack[-1] < num으로 주면서
num이 기존 값보다 크다면 stack pop을해서 제거한 후 while문을 나온다음 stack의 새로운 값으로 append된다.
num이 기존 값보다 작다면(즉, 기존 값이 더 크기 때문에 pop하지 않고 append를 한다.) append를 해서 new idx element가 된다. (순회하면서 현재 idx의 num이 가장 크다고 판단되기 때문에)
여기서 혼동이 있을 수 있지만, 문제 조건에서 순서가 중요하기 때문에 헷갈리지 말아야 한다.
for 문이 정상적으로 완료된 후에도 k가 0보다 커서, 즉, stack의 k번째 까지의 element가 계속 큰수부터 차례로 채워졌기 때문에 ( stack[-1] > num ) 뒤의 k자리수 까지 slicing으로 제거해줘야 한다.
728x90
'Algorithm' 카테고리의 다른 글
[Python] Heap (0) | 2021.03.10 |
---|---|
[프로그래머스] 조이스틱 (0) | 2021.03.05 |
[프로그래머스] 삼각 달팽이 (0) | 2021.03.04 |
[프로그래머스] 문자열 압축 파이썬 (1) | 2021.03.03 |
[프로그래머스] 주식가격 파이썬 (0) | 2021.03.03 |
댓글