반응형
https://programmers.co.kr/learn/courses/30/lessons/42883
나의 풀이
function solution(number, k) {
const numArray = [...number];
const stack = [];
while (numArray.length) {
if (k > 0 && stack[stack.length - 1] < numArray[0]) {
stack.pop();
k -= 1;
continue;
}
stack.push(numArray.shift());
}
return stack.slice(0, stack.length - k).join("");
}
하지만 테스트 코드 10번을 계속 실패하였다.
결국 방법을 찾지 못하였고 검색으로 다른 분들의 코드를 살펴보았다.
차이점은 나처럼 숫자 문자열을 배열로 바꾸는 과정과 매 순간 push(shift)를 하지 않는 것이었다.
그래서 다음과 같이 변경하였다.
function solution(number, k) {
const stack = [];
let num = 0;
let count = 0;
while (true) {
num = number[count];
if (k > 0 && stack[stack.length - 1] < num) {
stack.pop();
k -= 1;
continue;
}
stack.push(num);
if (count === number.length - 1) break;
count += 1;
}
return stack.slice(0, stack.length - k).join("");
}
pop과 push 메서드만을 사용하였다.
코드가 좀 길어졌지만 반복문에서 메서드 사용을 줄이니 속도면에서 큰 차이를 보였다.
특히 7번 8번은 속도가 10배는 빨라진 것 같다..
앞으로 한 줄 코드 등 짧은 코드를 추구하기보다, 시간 복잡도를 줄일 수 있는 코드를 작성하도록 많은 고민을 해보아야겠다.
반응형
'IT > Algorithm' 카테고리의 다른 글
프로그래머스) 프린터 (0) | 2021.11.24 |
---|---|
프로그래머스) 구명보트 (0) | 2021.11.23 |
프로그래머스) 124 나라의 숫자 (0) | 2021.10.29 |
프로그래머스) 멀쩡한 사각형 (0) | 2021.10.28 |
프로그래머스) 문자열 압축 (0) | 2021.10.28 |