카테고리 없음
[스택] 프로그래머스 같은 숫자는 싫어 (C++)
송파감자
2023. 9. 4. 22:35
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12906
나의 흔적 1 (오답)
1) 일단 매개변수로 받은 arr 요소를 answer에 때려넣어야 한다고 생각함
그래서 arr 크기 만큼 for문 돌려서 answer에 요소를 넣었다
2) 이후 answer요소 중에 중복인 숫자를 찾아서 중복이면 그 다음 요소를 덮어 씌워야 겠다고 생각했음.....
하지만 벡터의 요소는 push_back()함수로 뒤에 넣을 수 있다는 게 생각남!
나의 정답
1) 일단 가장 크게 신경 써야할 점 : 오타 신경 쓰는 게 정말 중요했다.. 별 것 아닌 걸로 몇 번을 다시 돌렸는지 모른다.
2) 0번 요소 push_back함수로 넣어준다.
3) 1번부터는 0번이랑 비교할 수 있으니 중복 아닌 경우만 push_back으로 넣어준다
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
for(int i{0}; i < arr.size(); ++i)
{
if(i == 0)
{
answer.push_back(arr.at(i));
}
else if(arr.at(i) != arr.at(i-1))
{
answer.push_back(arr.at(i));
}
}
return answer;
}
다른 코드
다른 사람들의 코드 중 엄청 간단한 코드를 보았다.
erase(시작, 끝)와 unique(시작, 끝) 을 사용해서 엄청 짧게 정리한 코드였다.
근데 나는 아직 이해하지 못해서.... erase 함수와 unique함수를 찾아보고 있당
erase함수
벡터배열에서 특정 원소 지울 때 씀
해당 인덱스의 값을 지우고 뒤에 원소를 앞으로 땡김
unique 함수
algorithm 헤더에 있음
벡터배열에서 중복되지 않은 원소들 앞부터 채움
(앞부터 채우니까 뒤에는 원소들 있음)
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr)
{
arr.erase(unique(arr.begin(), arr.end()),arr.end());
vector<int> answer = arr;
return answer;
}