본문 바로가기
Computer/Algorithm_Java

[Programmers] 같은 숫자는 싫어 (Success)

by HJ0216 2023. 9. 16.
 

프로그래머스

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

programmers.co.kr

 

Language: Java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.ArrayList;
import java.util.List;
 
public class Solution {
    public int[] solution(int []arr) {
        
        // 1. 연속된 값에 대해서만 중복 제거: Set, Map X
        // 2. 순서 유지
        
        int[] answer = {};
        
        List<Integer> list = new ArrayList<>();
        list.add(arr[0]);
        
        for(int i = 1; i<arr.length; i++) {
            if(arr[i-1]!=arr[i])
                list.add(arr[i]);
        }
        
        answer = new int[list.size()];
        
        int j = 0;
        for(int i : list){
            answer[j++= i;
        }
        
        return answer;
    }
}
 
 

🤔 해설

1. if(arr[i-1]!=arr[i]) list.add(arr[i]);

   - 이전 원소와 현재 원소가 같지 않을 경우에만 list에 추가

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.ArrayList;
import java.util.List;
 
public class Solution {
    public int[] solution(int []arr) {
        List<Integer> list = new ArrayList<Integer>();
        int preNum = -1;
        for(int num : arr) {
            if(preNum != num)
                list.add(num);
            preNum = num;
        }       
        
        int[] answer = new int[list.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = list.get(i).intValue();
        }
        
        return answer;
    }
}
 
 

1. if(preNum != num)

    - preNum을 선언하여 이전 숫자와 비교

2. intValue()

    - Integer → int 변환

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.LinkedList;
 
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;
    }
}
 
 

1. getLast();

     - LinkedList 함수: 마지막 값 출력, 이전 원소값

2. mapToInt(Integer::intValue)

    - mapToInt(): 스트림의 각 요소를 변환하고, 새로운 스트림을 반환

    - Integer::intValue: 메서드 레퍼런스(Method Reference), Integer 클래스의 intValue() 메서드

        - Integer 객체를 정수형(int) 값으로 변환

 

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

프로그래머스

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

programmers.co.kr