[프로그래머스] (LV2) 큰 수 만들기
큰 수 만들기
JavaScript
문제 설명
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
제한 조건
- number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1 이상
number의 자릿수
미만인 자연수입니다.입출력 예
number k return “1924” 2 “94” “1231234” 3 “3234” “4177252841” 4 “775841”
풀이
javascript
1 | function solution(number, k) { |
python
1 | def solution(number, k): |
설명
탐욕법이 사용 가능하며, 어느정도 구현 능력을 요구하는 문제다.
언뜻 간단히 k * n의 풀이 시간이 필요한 것처럼 보이는데, 여기서 문자열을 다루는 함수를 사용시 이 추가되어 가 되버리고, 효율성 측면에서 풀이에 실패한다.
스택 자료구조를 이용해 탐욕법으로 풀이를 한다면 의 풀이가 가능하다(python 풀이). 0부터 number의 길이까지 반복문을 돌며 현재 스택의 마지막 값보다 값이 크면 스택에서 pop()을 반복적으로 수행한다. 이를 통해 스택에는 큰수부터 작은수대로 나열된다. 수의 크기를 결정짓는 부분은 앞쪽이므로 앞 숫자들을 최대화 하는 알고리즘이다.
스택이 아닌 인덱싱을 통해서도 풀이가 가능하다(javascript 풀이). 스택을 사용하지 않을 뿐, 값 비교와 인덱싱을 통해 결과를 저장하는 메커니즘은 동일하다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
[프로그래머스] (LV2) 큰 수 만들기