알림
본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42883
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
코드
function solution(number, k) {
let answer = [];
for(let i = 0; i < number.length; i++){
// 직전에 입력된 요소와 현재 요소와 비교 후 더 큰 요소일 땐
while(k > 0 && answer[answer.length-1] < number[i]){
k--; // k 감소
answer.pop(); // 기존 요소(작은 요소) 제거
}
answer.push(number[i]);
}
// k를 다 사용하지 못한 경우, k만큼 요소를 제거
answer.splice(answer.length-k, k);
return answer.join('');
}
풀이
새로운 배열을 만들어 number 배열을 순차적으로 담아줍니다.
이때 k의 수만큼 number 배열을 제거해야 하고 가장 큰 수를 리턴해줘야 하기 때문에, k가 0 이상이면서 현재 입력되는 값이 직전 값보다 큰 경우에, k를 감소시키고 마지막 배열 요소(직전에 입력된)를 pop() 메서드를 통해 제거 후, 현재값을 입력해 줍니다.
이렇게 되면 자동으로 이전과 비교해 결과값이 큰 수로만 이루어질 수 있습니다.
하지만 이렇게 되며 테스트 케이스 12번에서 불합격을 하게 되는데요. 해당 케이스는 같은 숫자가 입력되어 k를 다 사용하지 못하고 제거된 요소 없이 전부 입력된 경우 같았습니다.
따라서 최종적으로 배열을 리턴해주기 전에, splice() 메서드를 사용하여, k만큼 잘라준 후에 리턴해줘야 합니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 올바른 괄호(JavaScript) (0) | 2022.08.09 |
---|---|
[Programmers] 소수 찾기(JavaScript) (0) | 2022.08.09 |
[Programmers] 다음 큰 숫자(JavaScript) (0) | 2022.08.06 |
[Programmers] 최솟값 만들기(JavaScript) (0) | 2022.08.06 |
[Programmers] N개의 최소공배수(JavaScript) (0) | 2022.08.05 |
댓글