일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 모르고리즘
- SSAFY IM/A
- 자료구조
- Have a good day :)
- HAVE A GOOD DAY
- have a nice day
- 우유가 옆으로 넘어지면 아야
- SSAFY 10기 화이팅
- SSAFY 화이팅
- SSAFY 테스트
- 우유가옆으로넘어지면아야
- 네트워크
- 아자아자 화이팅
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- DFS
- I am Korean
- 자고 싶다
- Have a nice day.
- 코로나 싫어요
- 텐션 업 10기!
- Java 환경 설정
- 우유아야
- amazon
- 수학
- DP
- Hamming weight
- SeongSeobDang
- 텐션 업 10기 화이팅
- BFS
- Today
- Total
Hope Everyone Is Happy
[Easy] - 26. Remove Duplicates from Sorted Array (C++) 본문
[Easy] - 26. Remove Duplicates from Sorted Array (C++)
J 크 2023. 1. 10. 22:56
https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/
Remove Duplicates from Sorted Array - LeetCode
Remove Duplicates from Sorted Array - Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place [https://en.wikipedia.org/wiki/In-place_algorithm] such that each unique element appears only once. The relative order of the e
leetcode.com
릿코드 탐방을 계획하자마자 급격하게 프로젝트들이 밀려 들어와 이제서야 다시 시작하게 되었습니다. 어느 순간 부터 위에 대리님이 실력이 안되신다고 프로젝트를 넘겨받다 보니 (이게 말이되나..) 프로젝트 경험은 많아져서 정말 좋지만, 조금은 부담스럽네요. 2년이 지난 지금, 이제는 저의 개인적인 발전이 거의 없는 경험만 늘어나고 있다는 것이 너무 불안하네요.
해당 문제는 LeetCode - Explore - Array 중 In-Place Operations 예제에 포함되는 문제입니다. 예제인 만큼 크게 어렵지 않게 풀 수 있었습니다.
문제의 조건 중 핵심 사항들을 정리하면 아래와 같습니다.
▶ 입력 된 배열은 non-decreasing order 로 정렬. (1개 이상의 원소)
▶ 입력된 배열의 원소가 중복될 경우, 한 원소를 제외하고 전부 뒤로 이동
▶ 중복된 원소 제외한 나머지 원소의 총 갯수를 K로 카운트 후 return
▶ Example )
Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,_,_,_,_,_]
위의 조건을 따라서, 간단하게 원소의 앞 뒤를 비교하여 다를 경우 뒤로 보내고, 배열의 크기 만큼 반복하였습니다. 뒤로 보내는 것이 문제였는데, 저는 std::vector의 erase 와 push_back 함수들을 사용하여 중복될 경우 지운 뒤 맨 뒤로 다시 원소를 추가하여 해결하였습니다. ( 1개 이상의 원소는 무조건 존재 하므로, 맨 앞의 원소는 카운트 하지 않고, 기본 카운트 갯수를 1부터 시작하였습니다.)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int nK = 1;
int nSize = nums.size();
for(int i = 0 ; i < nSize-1; i++) {
if(nums[i] == nums[i+1]) {
nums.erase(nums.begin() + i+1);
nums.push_back(nums[i]);
i--;
nSize--;
}
else{
nK++;
}
}
for(int i = 0 ; i < nK; i++) {
cout << nums[i] << endl;
}
return nK;
}
};
저는 개인적으로 다른 분들의 코드를 보는 것도 좋아하는데, 이번 문제에서 가장 인상 깊었던 코드는 고정 인덱스 하나와 탐색 인덱스 하나를 사용하여 in-place에 가장 가깝게 해결 하신 분 것이 가장 기억에 남네요. 또 한 번 배워갑니다! (해당 문제 정답을 맞추신 후 Solution 란에서 볼 수 있습니다!)
▲ Leetcode에 해설 및 Two-pointer technique 설명이 되어 있었습니다!! 인덱스를 읽어가는 readPointer 와 탐색하는 인덱스인 writePointer를 활용하는 방식이네요.
연습용으로 쉬운 문제를 한 번 포스팅 해봤는데, 지금은 문제가 쉬워 아무도 보지 않겠지만 저도 더 자세히 공부하고 기록하게 되고, 언젠가 어려워진 문제를 풀며 누군가 보고 도움이 되셨으면 하는 마음으로 늘 작성하도록 하겠습니다. (피드백은 언제나 감사하게 받겠습니다!)
좋은 하루 되세요~ :)
'※ 릿코드 ( LeetCode ) > [C++] 문제 풀이 ( Solve the problems )' 카테고리의 다른 글
Squares of a Sorted Array (C++) (0) | 2023.04.19 |
---|---|
[Easy] - 448. Find All Numbers Disappeared in an Array (C++) (0) | 2023.01.16 |
[Easy] - 905. Sort Array By Parity (C++) (2) | 2023.01.11 |
[Easy] - 283. Move Zeroes (C++) (0) | 2023.01.11 |
[Easy] - 13. Roman To Integer (C++) (0) | 2022.10.13 |