#링크 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려고 합니다. 예를 들면, 숫자의 1924 에서 수 2개를 없애면,[19, 12, 14, 92, 94, 24] 를 작성할 수 있습니다. 이 중에서 가장 큰 숫자는 94입니다. 문자열 형식으로 숫자 number와 제거하는 개수의 개수 k가 solution 함수의 매개변수로 부여됩니다. number에서 k개의 수를 제거했을 때 만들 수 있는 개수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성해야 합니다. 제한조건 number는 1… programmers.co.kr
문제 내용 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려고 합니다
예를 들면, 숫자의 1924 에서 수 2개를 없애면,[19, 12, 14, 92, 94, 24] 를 작성할 수 있습니다.이 중에서 가장 큰 숫자는 94입니다.
문자열 형식으로 숫자의 number와 제거할 수의 개수 k가 매개 변수로 주어지는 최대 숫자를 문자열 형식으로 return 하도록 solution 함수를 완성해야 합니다.
제한사항 number는 1자리 이상, 1,000자리 이하의 숫자입니다.k는 1 이상 number 자리 미만의 자연수입니다.
입출력예 number kreturn “1924” 2″94″ 1231234″ 3″3234″ “4177252841” 4″775841″
풀이 최대 100만 자리 숫자까지 들어가는 문제이므로 일일이 제거해 보는 방법으로 알고리즘을 구상하면 낭패를 볼 수 있다.
이 문제를 풀기 위해서는 다음 내용을 이해해야 한다. 1. 반환해야 할 숫자의 길이는 ‘number 길이 – k’로 고정이다.두 숫자의 길이가 같을 경우 두 숫자 중 큰 수를 알려면 앞부분부터 차례로 비교해야 한다.따라서 number의 길이를 앞에서부터 하나씩 늘려가면서 뒤에 이어지는 숫자와 비교해 작은 숫자는 잘라내는 방법으로 알고리즘을 구상할 수 있다.
예를 들어 number는 “1924”, k는 2 인 경우 현재까지의 숫자 다음에 이어지는 숫자 설명 제거된 수 1을 비교할 필요가 없기 때문에 뒤에 붙이는 => 10199가 1보다 크므로 뒤에 붙여도 된다 => 9219244가 2보다 더 크므로 2를 제거 => 10199가 1보다 크므로 뒤에 붙여도 된다 => 9219244가 붙여서 모두 붙여서 9항만 붙여서 다 붙여서 다시 붙여서 9항만 붙여서 다시 붙여서 2를 제거 =
Javascript 그대로 문자열 처리로 구현된 버전
Javascript 스택을 사용한 버전
같은 로직이지만 substrin g보다 pop, push가 더 빠르다