같은 숫자는 싫어 예제 질문입니다.

조회수 1222회

import java.util.*;

public class Solution { public int[] solution(int []arr) { int[] ans = new int[100]; int cur=arr[0]; int j=0; for(int i=1;i<arr.length;i++){ if(cur!=arr[i]){ ans[j]=cur; ans[j+1]=arr[i]; j++; cur=arr[i]; } } int[] answer = new int[j+1]; for(int b=0;b<answer.length;b++){ answer[b]=ans[b]; } return answer; } }

ans배열을 만들지 않고 실행했을때 주어진 배열arr에 들어있는 원소들의 수가 바뀌면 ArrayIndexOutOfBoundsException오류가 떠버려서 결국 ans배열에 값을 넣어두고 그 값만큼의 길이를 가진 answer배열을 새로 만들어 다시 넣고 실행했을때 결과값은 맞지만 효율성이 없다고 뜹니다... 바로 answer배열에 값을 넣지 않아 효율성이 떨어지는거라 생각되는데 그 방법 좀 알려주시면 감사하겠습니다ㅠㅠ

1 답변

  • 연속 된 같은 숫자를 제거 하는 것이라면 아래와 같은 방법은 어떨까요?

    public List<Integer> solution2(int[] arr) {
        final List<Integer> answer = new ArrayList<>();
        int value = arr[0];
        answer.add(value);
        for (int i = 1; i < arr.length; i++) {
            if (value != arr[i]) {
                answer.add(arr[i]);
                value = arr[i];
            }
        }
        return answer;
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 연속된 같은 숫자를 제거하는 것은 성공했지만 그 다음에 answer배열에 답을 넣는 과정에서 배열의 길이가 정해져있지 않아서인지 확실하진 않지만 오류가 떠서 결국 또 다른 배열 하나를 만들어 답을 넣어두고 그 배열을 answer배열에 집어넣어 효율성이 꽝이었어요ㅠㅠ 박성현 2018.7.15 01:35
    • 아 배열을 꼭 사용해야 하는 상황인가요? 알 수 없는 사용자 2018.7.15 11:35
    • 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 배열 arr에서 제거 되고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다.--->이게 문제입니다! 박성현 2018.7.15 21:40

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)