일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바스크립트 문제
- JS
- NPM
- 리액트쿼리
- 자바스크립트코딩테스트
- react
- 리액트
- Next
- Baekjoon
- leetcode
- leetcode문제풀이
- CSS
- JavaScript
- 자바스크립트
- 자바스크립트 알고리즘 문제
- 제로베이스
- Next.js13
- 자바스크립트 알고리즘
- 프로그래머스
- 알고리즘문제풀이
- next13
- til
- 자바스크립트 문제 풀이
- 타입스크립트
- lodash
- 프론트엔드
- 자바스크립트 문제풀이
- stack문제
- HTML
- 자바스크립트 연결리스트
- Today
- Total
코드노트
LeetCode 26. Remove Duplicates from Sorted Array 배열 문제 풀이 본문
LeetCode 26. Remove Duplicates from Sorted Array 배열 문제 풀이
코드노트 2022. 9. 18. 20:46문제 설명
일부 언어에서는 배열의 길이를 변경할 수 없으므로 대신 배열 번호의 첫 번째 부분에 결과를 배치해야 합니다.
더 공식적으로, 중복을 제거한 후 k 요소가 있으면 nums의 처음 k 요소가 최종 결과를 보유해야 합니다.
처음 k개 요소를 넘어 무엇을 남겨두는지는 중요하지 않습니다.
숫자의 처음 k 슬롯에 최종 결과를 배치한 후 k를 반환합니다.
다른 어레이에 추가 공간을 할당하지 마십시오.
O(1) 추가 메모리를 사용하여 제자리에서 입력 배열을 수정하여 이 작업을 수행해야 합니다.
와..문제 이해가 이렇게 어려운건 또 처음인거같다.. easy문제인데 계속 맞게 문제를 풀었는데 테스트가 통과되지 않았다..
내가 문제 이해를 못했구나... 배열을 return하려고 했는데 배열을 return하는게 아니였다...
간단하게 문제를 설명하면?
주어진 배열에서 중복값을 없앤 길이를 출력하는 되는 문제였다!
그리고 또 하나의 조건은 input배열을 그대로 써야한다. 새로운 배열을 만들면 안되는 문제였다...
그리고 여기 보면 문제를 채점할때의 기준이 나와있었다.
int[] nums = [...]; // Input array
int[] expectedNums = [...]; // The expected answer with correct length
int k = removeDuplicates(nums); // Calls your implementation
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
- 요약하자면 k개의 개수만큼 배열의 앞에서부터 순서대로 중복을 없앤 요소들을 체크하겠다는 의미다.
- 그 뒤에 있는 배열은 신경쓰지 않는다. 즉 지우지 않아도 된다..!
하 이런 문제들을 만날때마다 현타가 너무 온다..
이렇게 쉬운문제도 바로바로 이해가 안되다니ㅠㅠ....
let nums = [1, 1, 2];
var removeDuplicates = function (nums) {
if (nums.length === 0) return 0;
let k = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== nums[k]) {
console.log(nums);
k++;
nums[k] = nums[i];
}
}
return k + 1;
};
console.log(removeDuplicates(nums));
// for(i) k nums[i] nums[k]
// i = 0, k = 0 | 1 : 1
// i = 1, k = 0 | 1 : 1
// i = 2, k = 0 | 2 : 1 // 여기서 k++ 하면 k는 1이 된다. 그럼 nums[1]에 nums[i]값인 2를 넣어준다.
// 그럼 nums는 [1,2,2]가 되고, return한 k값만큼 nums배열을 확인하면 [1, 2]를 확인한다.
- k변수를 만든다.
- 만약 배열의 길이가 0이면 0을 리턴시킨다.
- 반복문을 통해서 nums[i]와 nums[k]를 비교한다. 같은 값이 아니면 k++ 후 nums[k]에 num[i]를 담아준다.
let nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4];
// for(i) k nums[i] nums[k]
// i = 0, k = 0 | 0 : 0
// i = 1, k = 0 | 0 : 0
// i = 2, k = 0 | 1 : 0 // 여기서 k++ == k = 1 / nums[1]에 nums[i]값인 1을 넣어준다.
// nums = [0, 1, 1, 1, 1, 2, 2, 3, 3, 4]
// i = 3, k = 1 | 1 : 1
// i = 4, k = 1 | 1 : 1
// i = 5, k = 1 | 2 : 1 // 여기서 k++ == k = 2 / nums[2]에 nums[i]값인 2를 넣어준다.
// nums = [0, 1, 2, 1, 1, 2, 2, 3, 3, 4]
// i = 6, k = 2 | 2 : 2
// i = 7, k = 2 | 3 : 2 // 여기서 k++ == k = 3 / nums[3]에 nums[i]값인 3를 넣어준다.
// nums = [0, 1, 2, 3, 1, 2, 2, 3, 3, 4]
// i = 8, k = 3 | 3 : 3
// i = 1, k = 0 | 4 : 3 // 여기서 k++ == k = 4 / nums[4]에 nums[i]값인 4를 넣어준다.
// nums = [0, 1, 2, 3, 4, 2, 2, 3, 3, 4]
// 그럼 nums는 [0, 1, 2, 3, 4, 2, 2, 3, 3, 4]가 되고,
// return한 k값 = 4 + 1 만큼 nums배열을 확인하면[0, 1, 2, 3, 4]를 확인한다.
- 다른 Input값을 보게되면 진행되는 순서를 작성해봤다. 이렇게 하나하나씩 배열이 늘어간다고 보면된다.
이 외에도 slice를 사용하는 방법이나 while문을 사용하는방법도 있었다.
약간 이문제를 풀면서 다시 한번 코딩테스트문제들을 여러가지 풀어봐야겠다는 생각을 한거같다..
'Code note > 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
자바스크립트 stack 알고리즘 문제 풀이 / 알파벳 순서대로 꺼내기 (0) | 2022.09.21 |
---|---|
leetcode 3. Longest Substring Without Repeating Characters 문제 풀이 (0) | 2022.09.18 |
자바스크립트 stack 괄호 짝 찾기 문제 풀이 (2) | 2022.09.17 |
자바스크립트 배열 stack 코드 문제 풀이 (0) | 2022.09.16 |
Leetcode Merge Two Sorted Lists 두 개의 정렬된 목록 병합 문제풀이, (0) | 2022.09.14 |