본문 바로가기

개발/프로그래머스

제일 작은 수 제거하기

https://programmers.co.kr/learn/courses/30/lessons/12935

 

코딩테스트 연습 - 제일 작은 수 제거하기

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1

programmers.co.kr

 

package programmers;

//내가 쓴 코드
import java.util.Arrays;

public class 제일작은수제거하기 {
	public static void main(String[] args) {
		int[] array = {1,4,3,2};
		System.out.println(Arrays.toString(solution(array)));
	}
	public static int[] solution(int[] arr) {
        int[] answer= {};
        int min = arr[0];//배열중 최솟값저장용
        int index = 0;// 배열중 최솟값의 위치
        if(arr.length==1){// 배열의 길이가 1일경우
            answer = new int[1];
            answer[0] = -1;
        }
        else {// 배열의 길이가 1이 아닐 경우
        	for(int i =1; i<arr.length; i++) {
        		if(min>arr[i]) {//최솟값보다 작은 것이 있는 경우
        			min = arr[i];//최솟값에 그 값을 대입하고
        			index = i;//위치 저장
        		}
        	}
        	answer = new int[arr.length-1];//1개를 삭제했기에, 원래배열 길이보다 1짧다
        	for(int j = 0; j<index; j++) {//인덱스 위치 전까지 배열값복사
        		answer[j] = arr[j];
        	}
        	for(int k = index+1; k<arr.length;k++) {// 인덱스위치 후부터 끝까지 배열값 복사
        		answer[k-1]=arr[k];
        	}
        }
        
        return answer;
    }
}

 

//다른사람들의 추천을 받은 코드(stream)
import java.util.Arrays;
import java.util.stream.Stream;
import java.util.List;
import java.util.ArrayList;

class Solution {
  public int[] solution(int[] arr) {
      if (arr.length <= 1) return new int[]{ -1 };
      int min = Arrays.stream(arr).min().getAsInt();
      return Arrays.stream(arr).filter(i -> i != min).toArray();
  }
}

이번에도 Stream을 사용한 코드가 있었는데, 공통적으로 보이는 댓글이 속도가 느리다는 댓글이었다.
시간복잡도를 중요시하기에 stream을 안쓰는 방향으로 풀기로 결정했다

'개발 > 프로그래머스' 카테고리의 다른 글

정수 내림차순으로 배치하기  (0) 2021.09.11
정수 제곱근 판별  (0) 2021.09.11
최대공약수, 최소공배수(유클리드호제법)  (0) 2021.08.19
하샤드 수  (0) 2021.08.16
콜라츠 추측  (0) 2021.08.16