새발블로그
[프로그래머스/C++] 같은 숫자는 싫어 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12906
풀이방법
set을쓰려다가 숫자들이 정렬이 되어있으면 안돼서 사용하지 않기로 했고,
봤을 때 숫자들이 차례대로 등장하다가 바뀌고 하는 식이길래 바로 앞의 원소와 같지 않으면 Push_back하는 방법으로 구현하였다.
다른 사람의 신기한 풀이도 있었다.
풀이1
#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++)
{
if (arr[i-1] != arr[i])
{
answer.push_back(arr[i]);
}
}
return answer;
}
풀이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;
}
erase는 i번째 요소를 지우는 함수이다.
unique함수는 algorithm 헤더에 존재하며, vector 배열에서 중복되지 않는 원소들을 앞에서부터 채워가는 함수이다.
다만, 중복되지않는 원소들을 앞에서부터 채워나가는 역할을 하기 때문에 남은 뒷부분은 원래의 vector원소의 값이 존재한다.
그래서 만약 unique만 쓴다면
unique(arr.begin(),arr.end());

이렇게 나머지가 원래의 원소로 채워진다.
따라서 erase를 통해 원소를 지워주면 기댓값과 같게 나온다.
'Problem Solving > Programmers' 카테고리의 다른 글
| [프로그래머스/C++] 폰켓몬 (0) | 2024.03.25 |
|---|---|
| [프로그래머스/C++] 수열과 구간 쿼리 (0) | 2024.03.07 |
| [프로그래머스/C++] 수 조작하기2 (0) | 2024.03.07 |
| [프로그래머스/C++] 수 조작하기 1 (0) | 2024.03.06 |
| [프로그래머스/C++] 주사위 게임 2 (0) | 2024.03.05 |