같은 숫자는 싫어
https://school.programmers.co.kr/learn/courses/30/lessons/12906
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
answer.push_back(arr[0]);
for (int i = 1; i < arr.size(); ++i)
{
int iNum = 0;
if (arr[i - 1] != arr[i])
answer.push_back(arr[i]);
}
return answer;
}
다른분의 코드를 보니 알고리즘 헤더에 유니크 함수를 이용하여 vector에 erase를 하는 것을 이용해 한줄로 끝낸것도 있던데, vector에서 중간 삽입/삭제는 별로라는 이야기를 들었던 기억이 있어 내 코드처럼 새로운 벡터에 삽입하는것과 기존 벡터에 이레이즈하는 것 중에 무엇이 더 효율적인지 궁금하다!
(근데 내가 만든 방법은 벡터의 크기를 미리 잡아주지 않아 오히려 더 별로일거같다)
추가)
알아보니 unique함수를 이용하면 중간중간 값을 지우는게 아니라, 중복값을 제거한 순서대로 앞에서부터 차례로 정렬해주며, 그 이후는 원래 vector의 원소대로 채워넣는 식으로 된다고한다.
그래서 erase를 반복하는 것이 아니라, unique함수로 정렬이 끝난 위치부터 end까지 erase하는 것으로 보여져서 딱히 문제될 것은 없어보인다.
n개의 원소에 대한 unique 함수의 시간복잡도는 O(n)이라고 한다!
비슷할거같은데 싶어서 직접 돌려본 결과 아래와 같이 나왔다
usigned int 최대 크기로 돌리면 뭔가 너무 큰거같아서 두자리 지우고 돌려본 결과
위에거가 내 코드고 아래거가 유니크 함수를 이용한 결과인데 뭐.. 다른건없었다.. ㅎ
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
[백준] 수 정렬하기 (0) | 2023.07.07 |
---|---|
[백준] 3052 나머지 (0) | 2023.07.05 |
[프로그래머스] 1레벨 문제 (0) | 2023.06.21 |
[프로그래머스] 1레벨 (0) | 2023.06.20 |
[프로그래머스] 1레벨 여러문제 (0) | 2023.06.17 |
댓글