[C++] 프로그래머스 같은 숫자는 싫어
반응형
programmers.co.kr/learn/courses/30/lessons/12906
1. 서론
level 1의 간단한 문제이다. 효율성을 보는 게 조금 독특했다. 아마 이러한 방법으로는 풀지 말라는 일종의 제한장치인 듯.
2. 문제 풀이
배열이 있다. 그 배열에 중복되는 숫자를 제외하고 난 배열을 return 하는 게 문제이다.
입출력으로 예를 들자면
4 4 4 3 3 -> 4 3
그래서 처음에는 예전에 풀어본 것 같은데? 싶어서 배열에 앞뒤가 같은 숫자가 나오면 지우고, 다시 그 index부터 검사해서 끝까지 같은 로직을 반복한 후 그 배열을 return 했다. 그런데 좀 이상했다. 그러면 왜 arr, answer 두 개의 배열을 준 걸까? 답을 제출해보니 알 수 있었다.
나는 erase 함수를 썼는데 그게 효율성에서 딱 걸리는 바람에 효율성 테스트 케이스 4개를 전부 틀렸다.
그래서 그때 알았다. 중복되는 숫자를 지우는 게 아니라 골라 담는 것이라는 것을...
3. 코드 설명
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
int i, t;
t = 0;
answer.push_back(arr[0]);
for (i = 1; i < arr.size(); i++)
{
if (answer[t] != arr[i])
{
answer.push_back(arr[i]);
t++;
}
}
return answer;
}
arr는 주어진 배열, answer는 답을 적어 넣는 배열.
일단 answer의 첫 번째 항에 arr의 첫번째 값을 넣는다. 그리고 그 값을 표본으로 arr를 검사해 나간다.
만약에 arr와 answer의 값이 같으면 아무것도 하지 않고, 다른 경우에는 answer에 arr의 값을 넣고 그 넣은 값과 뒤의 arr 값을 또 비교한다.
이렇게 끝까지 돌면 중복되지 않은 값만 answer 배열에 담기는 것이다.
반응형
'Algorithm' 카테고리의 다른 글
[C++] 프로그래머스 두 정수 사이의 합 (0) | 2020.11.11 |
---|---|
[C++] 프로그래머스 나누어 떨어지는 숫자 배열 (0) | 2020.11.11 |
[C++] 프로그래머스 가운데 글자 가져오기 (0) | 2020.11.09 |
[C++] 프로그래머스 3진법 뒤집기 (0) | 2020.11.08 |
[C++] 프로그래머스 2016년 (0) | 2020.11.07 |