Photo by Pietro Mattia on Unsplash
def solution(numbers, k):
answer = []
i = 0
while k > 0:
if len(numbers) -1 == i or numbers[i] < max(numbers[i+1:i+k+1]):
k-=1
else:
answer.append(numbers[i])
i+=1
return ''.join(answer)+ numbers[i:]
def solution(numbers, k):
answer = []
for number in numbers:
while answer and answer[-1] < number and k > 0:
answer.pop()
k-=1
answer.append(number)
if k > 0:
answer = answer[:-k]
return ''.join(answer)
다른 사람들의 풀이를 참고하여 고쳐본 코드이다. 속도면에서 엄청나게 차이를 보인다. 스택을 쌓아서 만들고자하는 생각에는 닿았지만 answer에 값이 없는 상황을 먼저 while 조건에 넣고 없을 때는 그냥 append로 넣어주는 부분을 생각하지 못해 긴 시간을 헤맸고 결국 다른 분들의 답을 볼 수밖에 없었다. 우선 튜터님께서 조언해주신대로 시간 안에 못 풀면 스트레스 받지말고 답을 보고 답을 쓴 사람들의 로직을 훔쳐서 내 것으로 만드는 것이 좋을 것 같다.
number = number[:i] + number[i+1:] 같이 변수를 슬라이싱으로 새롭게 할당하는 식은 빠르게 값을 얻어야 하는 로직에서는 피하는게 좋을듯하다. (사실 보기에도 그렇게 좋은 코드는 아니어서 앞으로 피하려고 한다.)