today_is

[ 알고리즘 ] 스택 - 같은 숫자는 싫어 (java) 본문

카테고리 없음

[ 알고리즘 ] 스택 - 같은 숫자는 싫어 (java)

ye_rang 2024. 7. 16. 03:59

https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

프로그래머스

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

programmers.co.kr

 

 

코드 

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        
        ArrayList<Integer> list = new ArrayList<>();
        
        int check = -1; //  배열은 0 ~ 9로 구성되어있기 때문
        
        for(int i=0; i < arr.length; i++) {
            if(arr[i] != check) {
                list.add(arr[i]);
                check = arr[i];
            }
        }

        return list.stream().mapToInt(i->i).toArray();
    }
}

 

 

한줄씩 해석

 

int 배열 answer을 생성한다

 

ArrayList를 이용하여 list 객체 생성

 

check 변수를 -1로 설정 ( 배열의 내용은 0 ~ 9로 설정되어있기 때문에, 범위 밖의 숫자인 -1로 초기화)

 

반복문을 이용하여 {

       만약 arr의 i번째 값이 check와 같지 않다면 {

              list에 arr의 i번째 값을 추가시켜주고,

              check에는 arr[i] 를 대입

       }

}

 

list의 각 값들을 배열로 반환한다

 

 

 

 

 

 

list.stream().mapToInt(i->i).toArray()

: Java Stream API를 사용하여 ArrayList를 int[] 배열로 변환하는 것

 


 

 느낀점 

단순히 중복 제거가 아니라,

연속되는 숫자만 제거해서 출력해야하기 때문에 한번 더 생각해보게 만드는 문제였다.

 

 

이 코드의 핵심은 ArrayList와 check 변수를 사용하여 연속적으로 나타나는 중복 요소를 제거하는 것이다

 

for 루프를 통해 배열을 한 번만 순회하면서, 이전 요소와 다른 경우에만 리스트에 추가하기 때문에 코드의 효율성이 높다.

 

또한 스트림 API를 사용해서 변환과정을 간결화시켰다 !!