알고리즘/프로그래머스 Level1

[프로그래머스,자바] Level1: 같은 숫자는 싫어

류창 2021. 8. 17. 23:55
반응형

문제분석

배열 arr의 숫자들이 연속적으로 나타내는 숫자면 제거하고 남은수들을 리턴하는 문제이다.

 

언뜻보면 중복을 제거 하는것같아서  중복제거 배열인 Set을쓰면 큰일난다. 중복이아니라 연속된숫자다. 

예제 1번만 보면 알수있다.

 

연속된 숫자, 즉 arr의 숫자들을 하나씩넣을때, 넣을숫자와 배열의 맨마지막 숫자가 같으면 안넣으면된다.

 

문제풀이

 

Stack을 사용해서 풀수있다. 하지만, 필자는 list의 마지막 원소를 반환해주는 list.getLast()를 사용했다.

 

list.getLast 원소와 arr[i]가 같지않으면 넣고, 같으면 넣게 구현했다.

 

그리고 list를  int[]형으로 변환하면 끝이다. 필자는, 변환하는법을 구글링해서 넣었지만,

 

list를 반복순회해 int[]에 넣어도 비슷한 속도를낸다. 그냥 가독성차이인것같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;
 
public class Solution {
    public int[] solution(int []arr) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        list.add(arr[0]);
        for(int i=1; i<arr.length;i++){
            if(arr[i]!=list.getLast()){
                list.add(arr[i]);
            }
 
        }
        Integer[] listing = list.toArray(new Integer[list.size()]);
        int []answer =Arrays.stream(listing).mapToInt(Integer::intValue).toArray();
        return answer;
    }
}
cs
반응형