오늘의 알고리즘 문제는 프로그래머스 같은숫자는 싫어이다.!
문제는 간단하다.
int 배열이 주어지며 연속으로 같은 숫자가 나오면 같은숫자 하나만 남기고 모두 제거한 배열을 리턴하면 된다.
input : arr[] = {1,1,1,3,3,2,2,1,1}
output : answer[] = {1,3,2,1}
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public static int[] solution(int[] arr) {
ArrayList<Integer> answerList = new ArrayList<>(); // 정답을 닮을 ArrayList 선언
int[] answer = {}; //정답을 담은 ArrayList로 부터 변환시켜줄 answer 선언
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] != arr[i + 1])
answerList.add(arr[i]);
// for문을 이용하여 배열의 앞뒤요소를 비교 하여 다른경우 앞의 요소를 추가
if (i == arr.length - 2) {
answerList.add(arr[arr.length - 1]);
//마지막 전과 마지막 요소가 서로 다를경우를 대비해 if문 추가
}
}
answer = answerList.stream()
.mapToInt(Integer::intValue)
.toArray();
//ArrayList를 Array로 변환
return answer;
}
}
이번 문제도 그리 난이도가 높지않은 문제였는데 중괄호 위치때문에 꽤나 애를먹엇다.. 중괄호위치에 따라 정답이 바뀔수있으니 디버깅할때나 오류 찾을때 유의하자.
이문제를 처음 풀때 List의 contains 를 사용할까 햇지만 이경우 모든 중복을 제거하는 것이 아니라 연속된 숫자의 중복을 제거하는 것으로 반복문을 통해서 해결하였다.!