C++에서 손을 떼고 Python만 한지 4년차... C++로 코딩테스트를 보게 됐다. 기본 문법만이라도 익숙해져보려고 하지만, 입출력에서 부터 오류가 나고 계속 틀린다😥.. 그래도 할 수 있는 한 계속해서 노력해보겠지만... 떨어지면 명백하게 내 실력 부족인거니까 미련을 갖진 않으려 한다.. 미련 갖고 후회 하기보단 계속 공부를 해야지..
코딩 테스트에서 자주 나오는 문제를 풀되, 기본 문법에 익숙해져야 하니까 뭘 풀까 고민하다가 LeetCode Top Interview Questions 를 풀기로 했다.
첫번째 문제는 정렬된 배열에서 중복을 제거하는 문제였다. 파이썬으로 풀 때는 정말 보자마자 바로 풀었는데, C++로 풀어보니 레퍼런스도 참고하고 문법을 찾아보다가 한시간이 걸렸다..
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
nums.erase(unique(nums.begin(), nums.end()), nums.end());
return nums.size();
}
};
정말 간단한 문제긴 했다.
벡터에서 중복을 제거할 때는 sort - unique - erase의 순서라고 한다.
- sort를 먼저 하는 이유는 unique는 중복된 값을 쓰레기 값으로(벡터의 제일 끝 부분으로) 보내기 때문이다.
- 다행히 이 문제는 정렬이 되어 있는 상태여서 unique 부터 사용하면 됐다. unique 함수는 벡터의 쓰레기 값의 첫번째 위치를 반환한다.
- <vertor>.erase(<start>, <end>)를 사용하면 벡터의 <start>번째 값부터 <end>번째 값까지 지울 수 있다. 그래서 unique가 반환하는 쓰레기 값의 시작 부분부터 쓰레기 값의 끝 부분(벡터의 마지막)까지 지우면, 중복된 값은 전부 삭제된다.
'Algorithm > CPP' 카테고리의 다른 글
[C++/LeetCode/Top Interview Questions]String (0) | 2021.06.16 |
---|---|
[C++/LeetCode/Top Interview Questions]Array (0) | 2021.06.15 |
[C++, LeetCode] Contains Duplicate 벡터에 중복 값 포함되었는지 확인하기 (0) | 2021.06.15 |
[C++/LeetCode]Rotate Array(벡터 값 회전하기) (0) | 2021.06.15 |
[C++/LeetCode]주식을 사고 팔기 가장 좋은 시기 II (0) | 2021.06.15 |