[2020-11-05] 같은 숫자는 싫어

2020. 11. 5. 14:30코딩테스트

푼 시간 : 30분

언어 : 자바

 


 

programmers.co.kr/learn/courses/30/lessons/12906

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr

 

쉬웠고 금방 푼 문제였다.

근데 맨날 효율적으로 코드를 짜고싶고 최대한 짧은 줄로 코드를 짜고싶다보니

고민하다가 시간을 늘리고 코드는 늘어나버린것 같다..

 

중복 처리만 생각하고, 또 카운트에 대해 고민했다.

arr[i]와 arr[i+1]이 다를때만 array배열에 넣었기때문에 마지막에 if와 else로 처리를 해준다.

[1, 1, 3, 5, 5, 0]같은 조건도 나올 수 있다는 생각에 else까지 넣어서 처리해준 것 같다.

 

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int count=0;
        int[] answer = {};
        int[] array = new int[arr.length];
        // 중복 된 수를 담아줄 배열
        
        for(int i=0; i<arr.length-1; i++){
            if(arr[i]!=arr[i+1]){
            // 전과 후를 비교해 중복이 되지않으면, 중복이 아닌 순서의 배열을 담아준다.
                array[count]=arr[i];
                count++;
            }
        }
        
        if(arr[arr.length-2]==arr[arr.length-1])
        // 혹시 마지막과 그 전에 중복이 될 경우에 담아준다.
            array[count++]=arr[arr.length-1];
        else
        // 마지막과 그 전이 중복이 안 될 경우 담아준다.
            array[count++]=arr[arr.length-1];
        
        answer=Arrays.copyOfRange(array, 0, count);
        // copyOfRange로 배열을 복사해준다. array~count

        return answer;
    }
}

 

쉬운문제만 골라서 푸는 것 같아서 좀 양심에 찔린다....ㅎㅎㅎ