-
vector<int> myVect = { 10, 20, 30, 20 ,40, 10, 50 };
의 배열이 선언되었을 때,
중복 요소를 삭제 한 후,
출력 값 (백터의 요소)이
{ 10, 20, 30, 40, 50 } 이 되어야 합니다.
😎 C++에서의 해더 파일에 존재하는 알고리즘을 사용하면, unique 를 이용해 간단하게도 가능하지만..
이를 사용하지 않고 구현해봤습니다.
for (int i = 0; i < myVect.size()-1; i++) { for (int j = i+1; j < myVect.size(); j++) { if (myVect[i] == myVect[j]) { myVect.erase(myVect.begin() + j, myVect.begin() + j+1); } } }
가장 앞의 인덱스의 값과 그것의 바로 뒤에 있는 인덱스를 시작으로 비교할 것 입니다.
단, 마지막 인덱스는 비교할 대상이 뒤에 없으므로, 백터 크기의 -1 으로 설정하고,
그 뒤의 인덱스는 가장 앞의 인덱스를 사용할 수 없으므로 i+1 의 형태를 취했습니다.
✨체크 포인트
여기서 erase를 통해 요소를 삭제하게 되면 배열의 크기 역시 감소하게 됩니다.
즉 위의 코드에서 배열의 크기가 감소되지 않도록 해야만 하는데요.
(반복할 때 배열의 크기는 줄었지만, 반복의 최대 수는 줄지 않았기 때문.)
하지만 조건을 size() 함수로 설정해놔 크기가 줄어들어도 반영되기에 저 형태로 사용해도 큰 문제가 발생하지는
않지만, 이러한 방법으로 size를 조절할 수 있다는 형태를 작성하였습니다.
myVect.insert(myVect.begin(), 0); cnt++;
erase의 하단에 삭제 후 가장 앞 부분에, 0을 추가하고 cnt 의 값을 하나씩 증가합니다.
라는 내용의 코드를 작성해줍니다. cnt 는 나중에 앞의 0을 추가한 값들을 다시 지우기 위해 사용합니다.
myVect.erase(myVect.begin(), myVect.begin() + cnt);
그 후 모든 반복문이 종료되어 비교가 종료되었을 때, cnt 만큼의 0의 개수를 삭제해 0을 삭제시킵니다.
위와 같이 코드가 예상한대로 출력되는 것을 확인할 수 있습니다.
🎉해당 글의 내용은 "포스코 x 코딩온 스마트 팩토리 과정 수업" 에서의 수업 자료 및 실습 과제 등에서 일부 발췌되어 작성 되었습니다.
'개발 > C++' 카테고리의 다른 글
[C++] Vector 복습. 2차원 배열에서 행과 열의 합을 구하기. (0) 2023.09.05 [C++] Vector 문법 복습 및 예제 풀이 (0) 2023.09.05 [C++] namespace의 개념과 간단한 실습 (0) 2023.09.04 [C++] Vector의 기본 개념 사용법, 함수, 이중 Vector 선언 후 배열 (0) 2023.09.04 [C++] 동적 배열과 포인터 개념과 문법 공부 (1) 2023.09.04 댓글 (비로그인 댓글 허용하지 않습니다.)