[Python3] 프로그래머스 큰 수 만들기

민갱·2023년 6월 29일

CT

목록 보기
19/35

큰 수 만들기

성공


def solution(number, k):
    answer = ''
    tmp = []
    
    for i,num in enumerate(number):
    	# while k > 0 and tmp[-1] < num and len(tmp) > 0:
        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
      • 요소가 있을 경우를 1번째 조건으로
    • tmp[-1] < num
      • i번쨰 요소가 tmp 마지막 요소와 비교
    • 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인 경우는 체크를 안하기 때문에 에러가 발생한다.
    한번은 더 생각해봐야할 포인트 인것 같다.
profile
가보자고

0개의 댓글