필요/코딩테스트(프로그래머스)
[프로그래머스/C++] ㅡ LV1 - 같은 숫자는 싫어
ㅊㅇㅅ
2021. 3. 3. 14:49
문제
programmers.co.kr/learn/courses/30/lessons/12906
코딩테스트 연습 - 같은 숫자는 싫어
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은
programmers.co.kr
풀이
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
int last = arr.size()-1;
for (int i=0; i<last; i++) {
if (arr[i] != arr[i+1]) { // 다음 배열값과 다르면 대입
answer.push_back(arr[i]);
}
}
answer.push_back(arr[last]); // 마지막 값의 대입
return answer;
}
개념
vector <int> arr 는 비어있는 arr 공간을 만든다.
이 배열에서 자신의 크기를 넘어서는 index를 넣은 값은 0 또는 전혀 다른 값이 나온다.
ex) a[2] = {1, 2}
a[3]의 값은 0 or 전혀 다른 값
풀이
반복되는 수를 누락시키면 된다.
반복문 안에서 조건문을 통해 배열값이 다음 배열 값과 다른 경우만 answer 배열에 대입한다.
이 경우 거의 해결되지만, 마지막 부분에 문제가 생긴다.
마지막 배열값과 범위를 넘어간 부분의 비교가 원활히 되지 않는다.
오히려 이 비교는 오류를 만들어낼 수 있다.
그 부분을 생략하기 위해 변수 last를 따로 지정했다.
마지막 값은 반복문 밖에서 anwer 배열에 대입한다.
+a
마지막에 생기는 문제는 주어진 입출력에 없었다.
이 케이스는 따로 테스트 케이스에 추가했다.
입력값 〉 | [1, 0, 0, 0] |
기댓값 〉 | [1, 0] |