큰 수 만들기
성공
def solution(number, k):
answer = ''
tmp = []
for i,num in enumerate(number):
while len(tmp) > 0 and tmp[-1] < num and k > 0:
tmp.pop()
k-=1
if k == 0:
tmp += number[i:]
break
tmp.append(num)
tmp = tmp[:-k] if k > 0 else tmp
answer = ''.join(tmp)
return answer
해설
- tmp 에 담겨있는 요소가 i번쨰 요소보다 작다면 k수가 0이 되기 전까지 제거해나가는 것이 key
- while문으로 tmp안의 요소를 모두 비교
- len(tmp) > 0
- tmp[-1] < num
- k >0
- 제거 해야하는 수 k가 0보다 클 경우 까지만 비교
- k ==0 일 때는 number에 남아있는 요소를 tmp 에 이어 붙이고 while 문 break
- 중요
- tmp = tmp[:-k] if k > 0 else tmp
- 만약 특이케이스로 이미 number가 모두 정렬이 되어있다면??
ex. 987654 / k =3 인 경우는?
- tmp.append(num)에서 number가 그대로 tmp에 들어왔을 것이고,
만약 k>0 이라면 tmp에 k만큼 뒤에서 잘라낸 tmp를 다시 tmp에 넣고 아니라면 tmp를 그대로 tmp에 담는다.
+@ 한번 더 생각
- while k > 0 and tmp[-1] < num and len(tmp) > 0:
- while len(tmp) > 0 and tmp[-1] < num and k > 0:
위의 두 조건은 틀리다, 조건은 순서대로 체크를 한다.
첫 번쨰 조건은 k>0 인지 먼저 체크 하고 tmp[-1]이 num 보다 작은지 체크하고 len(tmp) 가 0보다 큰지 체크 한다.
그러면 k==0인 경우는 체크를 안하기 때문에 에러가 발생한다.
한번은 더 생각해봐야할 포인트 인것 같다.