카테고리 없음

[스택] 프로그래머스 같은 숫자는 싫어 (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;
}