반응형
문제) 숫자 배열이 주어질때, 0은 배열의 끝으로 몰아 수정하는 것. 이 때, 배열은 카피해서 쓸 수 없으며, 원배열 자체를 수정해야 한다.
풀이) 야호! 이번 문제도 정해놓은 시간 안에 풀었다! (쉬운 문제, 정답률이 높은 것만...선정) 빈 배열을 정의하고, 0이 나올 때마다 해당 인덱스를 빈 배열에 오름차순으로 추가한다. 0이 아닌 숫자가 나올 경우, 0의 인덱스 중 제일 작은 숫자를 선정해 (오름차순으로 추가했기 때문에, 0번째 인덱스를 가져다 쓰면된다) 해당 인덱스와 순서를 스위치한다. O(n) 시간 복잡도를 가진다.
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
let zeros = [];
for(let i = 0; i < nums.length; i++){
if(!nums[i]){
zeros.push(i)
} else {
if(zeros.length) {
nums[zeros[0]] = nums[i];
nums[i] = 0;
zeros.splice(0,1);
zeros.push(i);
}
}
}
};
다른 풀이) 우선 변수 하나를 정의하고, 해당 변수를 이용해 0이 아닌 숫자를 왼쪽으로 쭉 몰아 넣는다. 그 후 마지막 0이 아닌 숫자 이후로는 nums 길이까지 0으로 바꾼다. 참신한 풀이같다!
var moveZeroes = function(nums) {
let lastNonZero = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0) {
nums[lastNonZero++] = nums[i]
}
}
for(let i = lastNonZero; i < nums.length; i++) {
nums[i] = 0
}
return nums;
};
https://leetcode.com/problems/move-zeroes/
반응형
'2. 우당탕탕 개발자 > 2-1. 공부기록' 카테고리의 다른 글
2020.08.31 Best Time to Buy and Sell 풀이 (0) | 2020.08.31 |
---|---|
2020.08.28 Majority Element 풀이 (0) | 2020.08.28 |
2020.08.25 Single number 풀이 (feat. 비트 연산자) (1) | 2020.08.26 |
2020.08.24 Merge Two Binary Trees 풀이 (0) | 2020.08.25 |
2020.08.24 Two Sum 다른 풀이 (0) | 2020.08.24 |
댓글