반응형
포스팅요약
1. 문제
문제보러 가기: https://leetcode.com/problems/remove-element/
출처: https://leetcode.com/ (LeetCode)
문제 해석 및 요약
배열 nums와 값 val 이 주어집니다. 주어진 배열에서 val값을 없애주면 됩니다.
일부 언어에서는 배열의 길이를 바꾸는게 불가능 하므로, val인 값을 제외한 값들을 앞으로 배치시켜 주세요. 또한 배열에서 val값을 뺀 길이 k를 리턴해주세요.
val인 값을 제외한 값들을 앞으로 배치시킬때 순서는 상관이 없습니다.
예)
Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_] or nums = [2,2,3,3] or nums = [2,2]
Explanation:
1) val값 3을 제외한 값을 앞으로 배치 혹은 제거 => [2,2,3,3] or [2,2]
2) val값을 제외한 배열의 길이 4-2 = 2
2. 코드
//방법 1 순회하며 값 없애기
for (let i=0;i<nums.length;i++){
if(nums[i]===val){
nums.splice(i,1);
i-=1;
}else{
continue;
}
}
> 원소가 제거되면 nums.length길이도 하나씩 줄어든다.
> 예를들면 nums= [1,2,2,3] , val = 2
for문을 돌릴때 i = 1일 경우, nums[i]===val이므로 splice로 제거한다. 그러면
[1,2,3] 이 되는데, i-=1을 안해주면 i=2 가 되므로, 값 하나를 놓치게 된다.
//방법 2 거꾸로 검사 하며 val값 없애기
for (let i=nums.length-1;i>-1;i--){
if(nums[i]===val){
nums.splice(i,1)
}else{
continue;
}
}
> 똑바로 순회할경우 위와같은 문제가 발생하지만, 현재 코드와 같이 거꾸로 순회하면 상관이 없어진다.
//방법 3 val값 뒤로 보내기
let k=0;
for(let i=0;i<nums.length;i++){
if(nums[i]===val){
continue;
}else{
if(nums[k]===val){
nums[k]=nums[i];
nums[i]=val;
}else{
nums[k]=nums[i];
}
k++;
}
}
return k;
> 배열에서 val값을 뒤에있는 값들과 교체시켜준다.
> 마지막에는 val값들이 뒤로 배치되는 형태가 된다.
반응형
'코딩테스트 > 코딩테스트 문제' 카테고리의 다른 글
프로그래머스 - 순위 검색 Lv2 풀이/주석/자세한 설명 (0) | 2022.08.10 |
---|---|
코딩테스트 문제: (LeetCode) Sqrt(x) - 자바스크립트 (0) | 2022.07.28 |
코딩테스트: LeetCode - 4. Median of Two Sorted Arrays (자바스크립트 풀이) (0) | 2022.07.14 |
Leetcode 깃허브 연동하기 및 사용법 (상세 설명) (0) | 2022.07.07 |
코딩테스트 문제 사이트 추천 (0) | 2022.07.07 |
댓글