반응형

문제 설명

배열 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] 을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이 (java)

import java.util.ArrayList;
import java.util.List;

public class DeleteDuplicate {

    public static void main(String[] args) {
        int[] arr = {1,1,3,3,0,1,1};
        solution(arr);
    }

    public static int[] solution(int []arr) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if(i == 0 || arr[i] != arr[i-1]) {
                list.add(arr[i]);
            }
        }
        // Stream을 이용한 List -> int[]
        return list.stream().mapToInt(Integer::intValue).toArray();
    }

}

 

풀이 방법

특별히 어려운 로직은 없고, 아래 2가지만 잘 생각하면 된다

  • 중복 여부 확인 : arr의 index로 이전 값으로 접근해서 중복 여부 체크
  • list <-> array 변환 : 기본형(Integer)이 아닌 int형의 배열로 바꾸기 위해 Stream 사용 

다른사람의 풀이 (java) 

    public int[] solution(int []arr) {
        ArrayList<Integer> tempList = new ArrayList<Integer>();
        int preNum = 10;
        for(int num : arr) {
            if(preNum != num)
                tempList.add(num);
            preNum = num;
        }       
        int[] answer = new int[tempList.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = tempList.get(i).intValue();
        }
        return answer;
    }

Godd Idea : 중복 여부를 확인할때, arr의 인덱스가 아닌 이전 값 체크용(preNum) 변수 사용하는게 키포인트

느낀점

 

반응형

+ Recent posts