[프로그래머스/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]