https://school.programmers.co.kr/learn/courses/30/lessons/12906
더보기 주의 , 코드에 관한 설명이 간략히 있지만 코드 내용 원문이 있으니 주의 할 것
<나의 풀이>
현재 index와 다음 index 값을 비교해서 다를경우,
answer에 현재 index값을 저장 후 roop를 진행한다.
index+1 했을때 arr의 size보다 크거나 같을경우 마지막 숫자를 answer에 추가하면서
반복문을 탈출한다.
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
//arr의 갯수만큼 roop
for(int i = 0 ; i< arr.size() ; i++)
{
//배열이 범위를 벗어나지 않게 하기위한 조건문
if( i+1 >= arr.size())
{
answer.push_back(arr[i]);
break;
}
//현재 index와 다음 index가 다를경우 값을 저장
if(arr[i] != arr[i+1])
{
answer.push_back(arr[i]);
}
}
return answer;
}
<다른사람의 풀이>
algorithm헤더의 unique함수와 std::vector의 erase 함수 두개를 활용하면 해당 배열의 원소 중 중복값을 없앨수 있다.
unique 함수 : 배열에서 원소를 앞에서부터 채워나가며 채운 함수중에 중복이 있으면 뒤로 보내는 함수이다.
unique함수는 중복되지 않은 값들을 나열 한뒤 남은 중복 원소의 첫번째 iterator 값을 반환,
unique함수를 사용하기전에 sort 함수를 하여 정렬할 필요가 있다.
(unique함수로부터 반환된 iterator , 배열의 끝 iterator) 범위를 eraser함수하면
함수 고유의 값들만 남아있다.
하지만 이 문제는 함수의 순서를 바꾸지 말라고 하였기에 sort함수를 사용하지 않고 바로 unique함수를 활요한 것이다.
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr)
{
//vector 에서 중복되는 함수들을 한곳에 모아 삭제할때 쓰는 구조다.
arr.erase(unique(arr.begin(), arr.end()),arr.end());
vector<int> answer = arr;
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
LV2.숫자 변환하기 (0) | 2023.10.26 |
---|---|
LV2.2개 이하로 다른 비트 (0) | 2023.10.26 |
LV.2 최솟값 만들기 (0) | 2023.06.09 |
LV.1 내적 (0) | 2023.06.09 |
LV.1 없는 숫자 더하기 (0) | 2023.06.09 |