프로그래머스

[프로그래머스_Level1] 제일 작은 수 제거하기

빙수빈수 2021. 7. 12. 17:59

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

 

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

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

programmers.co.kr

[문제]

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

 

[제한 조건]

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

[코드]

class Solution {
public int[] solution(int[] arr) {
		/*
		 * arr의 길이가 1이면 삭제하고 남은 값이 없기 때문에
		 * 새로운 배열을 만들어 -1을 저장하고 return 한다. 
		 */
		if(arr.length==1) {
        	int[] answer2= {-1};
        	return answer2;
        }
		
		// 배열 arr에서 가장 작은 값의 인덱스를 찾아 저장한다. 
		int minindex=0;
		for(int i=0;i<arr.length;i++) {
			if(arr[minindex]>arr[i])
				minindex=i;
		}
		
		int[] answer=new int[arr.length-1];
		int count=0;
		/*
		 * 가장 작은 값을 제외한 나머지 arr배열의 값을
		 * answer 배열에 저장한다. 
		 */
        for(int i=0;i<arr.length;i++) {
        	if(i==minindex)
        		continue;
        	answer[count++]=arr[i];
        }
        
        return answer;
    }
}


[고찰]

 처음에는 reverseOrder() 함수를 사용하여 가장 끝의 함수를 제거하려 했다. 하지만 계속해서 오답 처리를 받아 방법을 바꿔 풀어보았다. 함수의 return형이 int형 배열이기 때문에 arr의 길이가 1인 경우에는 새로운 배열을 선언하여 return 하였다. arr의 길이가 2 이상일 때는 가장 작은 값의 인덱스 값을 구하고, 해당 인덱스의 값만 answer 배열에 저장하지 않는 방식으로 코드를 짰더니 정답 처리를 받을수 있었다.