from collections import deque
def solution(number, k):
answer_leng = len(number)-k
number = list(number)
j = number.index(max(number[:k]))
k -= j
number = number[j:]
number = deque(number)
p = number.popleft()
num = p
while k and number:
p = number.popleft()
for i in range(len(num)):
if int(num[-1]) < int(p) and k:
num = num[:-1]
k -= 1
if num == '':
num += p
else:
num += p
break
# return num,k,list(number)
## 지워야하는 갯수가 남았을 때
if k and len(number)==0:
num = num[:answer_leng]
elif number:
n = ''.join(number)
num += n
return num
풀이
진짜 별거 아닌 문제 같은데 하루종일 풀었다.. deque로 맨 앞 원소부터 popleft로 가져오고, 문자열에 추가하는데 추가할 때 조건을 설정했다.
이미 문자열에 있는 숫자 a(임의)가 4고, p=7이라면, 문자열에 있는 -1번째는 삭제한다. 총 횟수는 문자열 내 원소 수만큼 시행하는데, 만약 a > p가 하나라도 나타나면 바로 p를 문자열에 추가하고 반복문은 멈춘다. 그리고 만약 num이 빈 문자열이 되었다면 p를 더하고 for문을 종료하도록 한다. (계속 null일 경우 for문이 아예 돌아갈 수 없다)
k와 number을 조건으로 걸었던 while문 종료 후, 이 두 자료형의 상태에 따라 후작업을 한 뒤 답을 출력했다. k는 1 이상인데, number은 null일 경우, 포함될 수 있는 숫자 갯수만 앞부터 선택한다. k가 0이고, number에 원소가 남아있을 경우엔, number에 있는 숫자들은 num에 모두 붙인다.