문제
문제 설명
어떤 숫자가 있을 때 여기서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 수를 구하는 문제입니다.
예를 들어, 숫자 number = 1924와 k=2로 주어졌을 때 만들 수 있는 숫자는 [19, 12, 14, 92, 94, 24] 이고 이 중 가장 큰 수인 94를 반환하면 되는 문제입니다.
더보기
※제한 조건
- number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1이상 number의 자릿수 미안인 자연수입니다.
풀이
가장 작은 수 k를 제거해서 가장 큰 수를 만든 다는 말은 가장 큰 수 number-k개를 찾는다는 것과 같은 말로 볼 수 있습니다.
그래서 제가 선택한 방법은 number의 모든 요소를 순회하면서 result라는 배열에 모든 항목을 추가하면서, 만약 다음 요소가 바로 이전의 요소보다 작으면 그 항목으로 교체해주었습니다. 여기서 교체된다는 것은 그 항목을 삭제한다는 말과 같기 때문에 k번만 교체가 가능하도록 제한를 두었습니다.
그리고 number의 요소를 반복하는 동안 k번의 교체가 이뤄지지 않을 수도 있기 때문에 마지막 부분에서 number.length -k 만큼 result의 길이를 빼주는 작업을 해주었습니다.
아래는 풀이에 사용한 코드입니다.
function solution(number, k) {
var answer = '';
let result = [];
// number의 요소를 정수형으로 바꿔주는 부분입니다.
number = number.split("")
number.map((data,idx) => {
number[idx] = parseInt(data)
})
// number의 각 요소를 순회하면서 큰 수를 찾아줍니다.
number.map((data) => {
// 교체 횟수(k)가 남았거나 현재 요소가 이전 요소보다 크면 교체 진행
while(k > 0 && data > result.at(-1)){
result.pop();
k--;
}
result.push(data)
})
// 교체 횟수(k)가 남을 경우를 대비한 result의 길이 조정
result = result.slice(0, number.length - k);
result.map((data) => {
answer += data
})
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.01 신고 결과 받기 (JavaScript) (0) | 2024.06.07 |
---|---|
[프로그래머스] Lv.01 외톨이 알파벳 (JavaScript) (0) | 2024.06.07 |
[프로그래머스] Lv.02 스킬트리 (JavaScript) (1) | 2024.06.05 |
[프로그래머스] Lv.03 연습문제 [1차] 셔틀버스 (JavaScript) (1) | 2024.06.03 |
[프로그래머스] Lv.01 연습문제 대충 만든 자판 (JavaScript) (0) | 2024.05.17 |