Problem Solving/Programmers
[프로그래머스 / JS] 큰 수 만들기 - Level 2
애송이개발자
2023. 3. 22. 11:02
🚩 문제 주소
https://school.programmers.co.kr/learn/courses/30/lessons/42883
📄 접근 방법
그리디
더보기
- stack 배열을 빈배열로 생성합니다.
- number 배열을 for...of문으로 순회합니다.
- k가 0보다 크고 stack배열의 끝 원소가 현재 탐색한 number배열의 원소보다 작다면
stack배열에서 원소를 pop 합니다. ( 큰 숫자를 만들어야 하기 때문에)
숫자를 제거 했으므로 k도 1 감소시켜줍니다.
조건을 만족하지 않는다면 크거나 같다는 것이기 때문에, 숫자를 push합니다. - 이 부분은 엣지 케이스인데, number 배열을 전부 순회했는데 k가 남는 경우도 있습니다.
따라서 숫자들이 모아진 stack 배열의 뒤에서 부터 k만큼 지워줍니다.
ex) number: "987", k: 1일 때 정답은 "98"이 나와야하지만, 이 과정이 없다면 "987"이 나옵니다. - stack배열을 join한 뒤 반환합니다.
👨💻 나의 코드
function solution(number, k) {
const stack = [];
// k가 0보다 크고 stack의 끝이 number[i]보다 작다면
// stack pop, k--
// stack.push(number[i])
for (const value of number) {
while (k > 0 && stack.at(-1) < value) {
stack.pop();
k--;
}
stack.push(value);
}
// number를 다 반복했는데 k가 남은경우
// 뒤에서 k만큼 잘라줘야함
stack.splice(stack.length-k, k);
return stack.join('');
}