프로그래머스 level1 같은 숫자는 싫어 c++, java 풀이입니다
https://programmers.co.kr/learn/courses/30/lessons/12906
[코딩테스트 연습 - 같은 숫자는 싫어 | 프로그래머스
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 retur
programmers.co.kr
java로 처음 풀이
import java.util.*;
public class Solution {
public static int[] solution(int []arr) {
ArrayList<Integer> arrList = new ArrayList<>();
for(int i=0; i<arr.length-1; i++){
if(arr[i] != arr[i+1]){
arrList.add(arr[i]);
}
}
arrList.add(arr[arr.length-1]);
int[] answer = new int[arrList.size()];
for (int j = 0; j < arrList.size(); j++) {
answer[j] = arrList.get(j);
}
return answer;
}
}
그래서 위 처럼 for문을 돌면서 그 다음 숫자와 같은지 확인해서
같지 않다면 array list에 추가해줍니다
이렇게 한다면 마지막 숫자는 추가되지 않아요
[1 1 3]이라는 숫자가 있다면 13이 나와야 되죠??
근데 맨위의 for문을 돌고나면 1밖에 안들어가 있어요
맨 마지막 숫자는 숫자가 같던 같지 않던 무조건 들어가야 하기 때문에
따로 넣어줍니다
그리고 배열을 생성해서 get method를 통해 하나씩 꺼내서 answer배열에 넣어주고 반환합니다
더 쉬운 풀이 (c++)
단순하게 이전 수와 현재 index의 수가 같은지 비교하여
같다면 연속된 수로 판단하여 넣지 않고
같지 않다면 그 수를 넣게 되면 순서도 유지하고 연속된 수를 하나만 넣을 수 있습니다
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> ans;
int before;
ans.push_back(arr[0]);
before = arr[0];
for (int i = 1; i < arr.size(); i++) {
int num = arr[i];
// 이전 수와 현재 수가 다르면 넣기
if (before != num) {
ans.push_back(num);
}
before = num;
}
return ans;
}