🚩 문제 주소
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('');
}
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스 / Python, JS] 키패드 누르기 - Level 1 (0) | 2023.03.22 |
---|---|
[프로그래머스 / Python] 숫자 문자열과 영단어 - Level 1 (0) | 2023.03.22 |
[프로그래머스 / Python] 다트 게임 - Level 1 (0) | 2023.03.22 |
[프로그래머스 / Python] 비밀지도 - Level 1 (0) | 2023.03.22 |
[프로그래머스 / Python] 크레인 인형뽑기 게임 - Level 1 (0) | 2023.03.22 |