반응형
내가 맨 처음에 작성했던 코드는 다음과 같다.
처음엔 반복문으로 쓰다가 , 이건 queue 같다 싶어서 queue를 이용했다.
그런데 하다보니 후입선출이 되는걸 보고 stack이란걸 깨달았다.
function solution(number, k) {
//현재값보다 다음값이 크면 현재값을 제거해야함. 무조건 제거임
if(k===0)return number
let stack = [number[0]]
let idx = 0;
for(let i = 1;i<number.length;i++){
if(number[i-1]<number[i]){
stack.pop()
k--;
}
stack.push(number[i])
if(k===0) {
idx = i;
break;
}
}
if(k===0)
stack=[...stack,...number.slice(idx+1)]
return stack.join('')
}
하지만 number='4177252841'
, k= 4
인 상황에서 계속 '4775841'
이 나왔고,
앞의 4를 지우는 방법을 생각하지 못했다.
고민하다가 검색을 했는데 나와는 조금 다른 stack
었다.
function solution(number, k) {
let answer = '';
let count = 0;
let stack = [];
for(let i=0; i<number.length; i++){
while(stack.length != 0){
// 카운트가 끝났으면 루프를 빠져나온다.
if(count === k) break;
// 현재 스택에 있는 값이 비교하는 숫자보다 작다면 제거하고 카운트를 1 증가한다.
if(stack[stack.length-1] < number[i]){
count++;
stack.pop();
}else break;
}
// 스택이 비어있다면 다음 숫자를 넣는다.
stack.push(number[i]);
}
//substr(0,number.length-k)는 number='8888888'이어서 k가 그대로 내려왔을 경우이다.
answer = stack.join("").substr(0, number.length-k);;
return answer;
}
프로그래머스를 많이 풀어봐야겠다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
프로그래머스 키패드 누르기 (자바스크립트) (0) | 2021.10.28 |
---|---|
프로그래머스 : 숫자 문자열과 영단어 자바스크립트 (0) | 2021.10.27 |
알고리즘 21 : 프로그래머스 체육복 (0) | 2021.10.25 |
QuickSort 정리 (0) | 2021.10.17 |
InsertionSort 정리 (0) | 2021.10.16 |