새소식

알고리즘 문제풀이/프로그래머스

[프로그래머스(Programmers)] level1 같은 숫자는 싫어 (c++, java)

  • -

프로그래머스 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;
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.