문제
https://programmers.co.kr/learn/courses/30/lessons/12906
코딩테스트 연습 - 같은 숫자는 싫어
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은
programmers.co.kr
풀이
문제를 풀기위한 알고리즘은 따로 필요없었고 구현으로 풀 수 있었다.
문제 자체는 되게 쉬워보였지만 풀다보면 좀 까다로운 조건 처리가 필요함을 알 수 있을 것이다.
for문으로 arr의 마지막원소 이전까지 모든 원소에 대해 앞뒤가 같은지 판단했고, 같다면 다시 while 루프를 통해 앞뒤 원소가 같지 않은 인덱스를 발견할때까지 탐색을 해주었다. 앞뒤 원소가 같지 않은 인덱스를 만나면 for문의 기준점을 그 인덱스로 교체해주었고, 탐색의 시작점을 answer에 넣어주었다.
처음부터 탐색을 진행할 수 없이 앞뒤 원소가 다르다면 바로 answer에 넣어주고 다시 for문을 돌려주면 된다.
또한 처음 for문에 범위를 잡을때 마지막 원소 이전까지라는 범위를 잡았으므로 따로 마지막 원소의 값이 뒤의 원소와 다르다면 answer에 또 넣어주는 조건 처리가 필요하다. 만약 마지막 원소의 값이 이전의 원소와 같다면 이미 그 값은 answer에 들어가있기 때문에 넣어 줄 필요가 없다.
코드
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
if (arr.size() == 1)
{
answer.push_back(arr[0]);
return answer;
}
for (int i = 0; i < arr.size() - 1; i++)
{
if (arr[i] == arr[i + 1])
{
int idx = i;
while (true)
{
if (arr[idx] != arr[idx + 1])
{
break;
}
else
{
idx++;
}
}
answer.push_back(arr[idx]);
i = idx;
}
else
{
answer.push_back(arr[i]);
}
if (i + 1 == arr.size() - 1)
{
if (arr[i + 1] != arr[i])
{
answer.push_back(arr[i + 1]);
}
}
}
return answer;
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로그래머스 Level1 폰켓몬 C++ (0) | 2022.05.19 |
---|---|
[프로그래머스] 프로그래머스 Level1 소수 찾기 C++ (0) | 2022.05.19 |
[프로그래머스] 프로그래머스 Level2 땅따먹기 Java (0) | 2022.05.18 |
[프로그래머스] 프로그래머스 Level2 최솟값 만들기 Java (0) | 2022.05.18 |
[프로그래머스] 프로그래머스 Level1 [1차] 비밀지도 Java (카카오 코딩테스트) (0) | 2022.05.12 |
문제
https://programmers.co.kr/learn/courses/30/lessons/12906
코딩테스트 연습 - 같은 숫자는 싫어
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은
programmers.co.kr
풀이
문제를 풀기위한 알고리즘은 따로 필요없었고 구현으로 풀 수 있었다.
문제 자체는 되게 쉬워보였지만 풀다보면 좀 까다로운 조건 처리가 필요함을 알 수 있을 것이다.
for문으로 arr의 마지막원소 이전까지 모든 원소에 대해 앞뒤가 같은지 판단했고, 같다면 다시 while 루프를 통해 앞뒤 원소가 같지 않은 인덱스를 발견할때까지 탐색을 해주었다. 앞뒤 원소가 같지 않은 인덱스를 만나면 for문의 기준점을 그 인덱스로 교체해주었고, 탐색의 시작점을 answer에 넣어주었다.
처음부터 탐색을 진행할 수 없이 앞뒤 원소가 다르다면 바로 answer에 넣어주고 다시 for문을 돌려주면 된다.
또한 처음 for문에 범위를 잡을때 마지막 원소 이전까지라는 범위를 잡았으므로 따로 마지막 원소의 값이 뒤의 원소와 다르다면 answer에 또 넣어주는 조건 처리가 필요하다. 만약 마지막 원소의 값이 이전의 원소와 같다면 이미 그 값은 answer에 들어가있기 때문에 넣어 줄 필요가 없다.
코드
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
if (arr.size() == 1)
{
answer.push_back(arr[0]);
return answer;
}
for (int i = 0; i < arr.size() - 1; i++)
{
if (arr[i] == arr[i + 1])
{
int idx = i;
while (true)
{
if (arr[idx] != arr[idx + 1])
{
break;
}
else
{
idx++;
}
}
answer.push_back(arr[idx]);
i = idx;
}
else
{
answer.push_back(arr[i]);
}
if (i + 1 == arr.size() - 1)
{
if (arr[i + 1] != arr[i])
{
answer.push_back(arr[i + 1]);
}
}
}
return answer;
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로그래머스 Level1 폰켓몬 C++ (0) | 2022.05.19 |
---|---|
[프로그래머스] 프로그래머스 Level1 소수 찾기 C++ (0) | 2022.05.19 |
[프로그래머스] 프로그래머스 Level2 땅따먹기 Java (0) | 2022.05.18 |
[프로그래머스] 프로그래머스 Level2 최솟값 만들기 Java (0) | 2022.05.18 |
[프로그래머스] 프로그래머스 Level1 [1차] 비밀지도 Java (카카오 코딩테스트) (0) | 2022.05.12 |