(7/23 - O)

 

https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

구현1

벡터 내의 연속된 숫자만 삭제하면 된다.

stack(이하 s)에 arr의 요소들을 반복문을 통해 순서대로 집어넣는다. 집어넣을 때 s의 top과 집어넣을 요소가 같다면 continue 처리하면 끝.

 

 

코드1

#include <vector>
#include <iostream>
#include <stack>

using namespace std;

vector<int> solution(vector<int> arr)
{
    vector<int> answer;
    
    stack<int> s;
    for (const auto& i : arr) {
        if (s.empty()) {
            s.push(i);
            answer.push_back(i);
        }
        else {
            if (s.top() != i) {
                s.push(i);
                answer.push_back(i);
            }
        }
    }


    return answer;
}

 

구현2

unique를 이용하여 중복 원소 제거

 

 

코드2

#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;
}

 

 

비교

구현1
구현2

 

도움 된 글

https://en.cppreference.com/w/cpp/algorithm/unique

 

std::unique - cppreference.com

(1) template< class ForwardIt > ForwardIt unique( ForwardIt first, ForwardIt last ); (until C++20) template< class ForwardIt > constexpr ForwardIt unique( ForwardIt first, ForwardIt last ); (since C++20) template< class ExecutionPolicy, class ForwardIt > F

en.cppreference.com

 

+ Recent posts