[프로그래머스] : 같은 숫자는 싫어

로빈고·2023년 3월 25일
0

Java

목록 보기
5/11

자바 문제 풀이 write-up

👀문제

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다.

✨풀이

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer;
		int i=1, ansCount =1;
		
		for(i=1; i<arr.length; i++){
            if(arr[i]!=arr[i-1])
                ansCount++;
        } //answer 배열의 길이 파악
        
        answer = new int[ansCount]; //배열 크기 지정
        answer[0] = arr[0];
        ansCount=1;
        
        for(i=1; i<arr.length; i++){ //answer값 초기화
            if(arr[i]!=arr[i-1]){
                answer[ansCount]=arr[i];
                ansCount++;
            }
                
        }
		
        return answer;
    }
}

⚠️issue

answer 배열 크기 지정 문제

answer값을 초기화하면서 배열 크기를 실시간으로 늘리고싶은 욕심에
temp배열을 따로 만들어

int[] temp = new int[arr.length + 1]; // 크기가 1 더 큰 새로운 배열 생성

for (int i = 0; i < arr.length; i++) {
    temp[i] = arr[i]; // 기존 배열 값 복사
}

temp[arr.length] = 6; // 새로운 값 추가

arr = temp; // 새로운 배열을 기존 배열로 대체

이처럼 값을 초기화 할때마다 위 과정을 반복하려고 시도했다.
=> 출력값은 정답처리 되었지만 효율성 테스트에서 실패했다.

🗝️solution

계속 찾아보다가 그냥 깔끔하게 배열 길이를 먼저 구하는 방법을 선택했고
위 처럼 간단한 반복문 2개로 답을 구할 수 있었다.

🤓sum-up

  • java에서는 C처럼 int배열 크기를 미지정 해놓고 자유롭게 사용할 수 없다.
  • 비효율적인 방법 말고 더 나은 문제 접근법을 새로 생각해보자.
profile
Cucumber hater.

0개의 댓글