today_is
[ 알고리즘 ] 스택 - 같은 숫자는 싫어 (java) 본문
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를 사용해서 변환과정을 간결화시켰다 !!