1. 문제
/*
문제 : 정수 배열 lst가 있다 배열의 중복값 제거하고, 배열데이터 내림차순으로 정렬해서 반환하는 solution함수 완성하기
조건 :
- lst 길이는 2이상 1,000이하
- lst 원소값은 -100,000 이상 100,000이하
*/
2. 문제의 코드
#include <vector>
#include <algorithm> //sort를 위해 선언
#include <iterator>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> lst)
{
return lst;
}
//-------------------------------------------------------------------------
#include <iostream>
#include <iterator>
void print(vector<int> vec)
{
copy(vec.begin(), vec.end(), std::ostream_iterator<int>(cout, " "));
cout << endl;
}
//-------------------------------------------------------------------------
int main()
{
print(solution({ 4, 2, 2, 1, 1, 3, 4 })); // 4 3 2 1
print(solution({ 2, 1, 1, 3, 2, 5, 4 })); // 5 4 3 2 1
return 0;
}
3. 나의 코드
또 못 풀엇다 (망코드)
vector<int> solution(vector<int> lst)
{
sort(lst.rbegin(), lst.rend());
auto NewTemp = unique(lst.begin(), lst.end());
int i = 0;
for (auto It = lst.begin(); It != NewTemp; ++It)
{
lst[i] = *It;
++i;
}
cout << endl;
return lst;
}
4. 정답 코드
vector<int> solution(vector<int> lst)
{
sort(lst.begin(), lst.end()); // 오름차순 정렬 먼저
auto NewEnd = unique(lst.begin(), lst.end()); // 중복된 애를 반환함
lst.resize(distance(lst.begin(), NewEnd));
sort(lst.rbegin(), lst.rend());
return lst;
}
5. 나의 코멘트
- unique 함수 써야하는 건 알았다 ->하지만 얘가 뭘 반환하는지 정확히 몰랐음
- 얘는 중복된 애들 맨 뒤로 미뤄놓고 중복된 애 첫애 위치를 반환한다
- NewEnd는 lst 벡터에서
- 1, 2, 2, 3, 3, 3이라면 1, 2, 3, 2, 3, 3 중에서 두번쨰 2 위치를 가리키는 애다!
- 하지만 lst 벡터 사이즈는 그대로지! 그래서 resize를 시켜주는건디 이걸 또 어케하냐
- distance 함수 첨봤다.. distance(위치1, 위치2) : 위치1과 위치2 사이의 거리 반환
- 역시... 기본이 되어야 하는군....
'알고리즘(C++)' 카테고리의 다른 글
유니온 파인드 알고리즘 (0) | 2025.02.03 |
---|---|
배열 - 두개 뽑아서 더해서 정렬하기 (0) | 2025.01.30 |
배열 - 배열정리하기 (0) | 2025.01.30 |
큐- 요세푸스 문제 (0) | 2025.01.28 |
스택 - 10진수를 2진수로 바꾸기 (0) | 2025.01.28 |