티스토리 뷰

문제는 이렇다.

k번 숫자를 제거할 수 있고, 제거했을때 가장 큰 수를 만드는것.

가장 큰 수니까 앞에서부터 제거했을때 가장 큰 수끼리만 조합되게 해야한다.

1, 9, 2, 4 를 예를들면 1 < 9 이므로 1을 제거하고 9가 그 자리를 차지한다. 9 > 2 이므로 2는 냅두고, 2 < 4 이므로 2가 제거되고 그 자리를 차지한다.

앞의 수 보다 큰 수가 나오면 제거하고 자리를 차지한다고 생각이 정리됐다.

 

일단 number의 0번째 인덱스를 large_num에 넣어서 비교를 시작한다 (이렇게 하는 이유는 비교문을 그냥 통째로 비교를 시작하면 0번째 인덱스가 비교할 대상이 없어서 list 범위 초과 오류가 떠버린다.) .

 

그리고 나머지를 for문으로 하나씩 비교한다.

 

이 비교문에는 조건이 3가지가 있다

 

첫 번째 조건은 large_num의 길이가 0 이상인경우다. 만약 첫 번째 비교에서 large_num의 마지막 원소가 삭제돼 비어있으면 다음 숫자가 비교할 대상이 없어져서 list 범위 오류가 난다.

 

두 번째 조건은 large_num의 마지막 원소가 비교대상인 num보다 작아야 한다. 그렇지 않다면 while문을 거치지 않고 그냥 large_num 리스트에 append되면 목표에 맞게 큰 수를 만들고 있는 것이다. 해당 조건이 large_num의 마지막 원소를 pop하는 가장 중요한 조건이라고 할 수 있다.

 

세 번째 조건은 k > 0 이다. 몇개의 수를 없앨건지 k가 정해주는데, 없앨 때마다 k -= 1 해주기 때문에 k가 0이되면 더이상 해당 while문은 돌아가지 않는다. 나머지 숫자들이 그저 large_num에 append되면서 for문이 종료되면 된다.

 

마지막 케이스가 실패가 떠서 많이 곤란했는데, for문을 다 돌고도 k가 남아있는 경우이다.

이 경우 그냥 large_num의 뒤에있는 숫자들을 k만큼 지우면 된다.

앞의 숫자들은 이미 앞선 for문에 의해 가장 큰 수들로 이루어져 있으므로 굳이 추가로 지우게 될 경우 뒷 숫자들을 지우면 상관없게된다.