문제 설명
정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해 주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를 들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴하고, [10] 면 [-1]을 리턴합니다.
제한 조건
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
생각 흐름
Arrays의 sort()를 이용해 푸는 방법과, 없이 푸는 방법 중 후자를 택해 문제풀이를 진행하였다
1. 리턴 배열이 빈 배열인 경우.
코드의 도입부에서, if문을 통해 arr의 길이가 1이면 바로 -1을 담아 리턴해주도록 하였다.
if(arr.length == 1){
answer = new int[] {-1};
}
2. 1에 해당하지 않는 경우
2-1. arr의 최솟값과 해당 인덱스 판단하기
//1. 최소값과 해당 인덱스 판단
int min = arr[0];
int min_idx = 0;
answer = new int[arr.length-1];
for(int i=0; i<arr.length; i++){
if(arr[i] < min ){
min = arr[i];
min_idx = i;
}
}
answer은 arr에서 최솟값이 하나 빠진 상태이기 때문에 arr길이에서 -1을 하여 생성해 준다.
(빈 배열은 기본값이 0이기 때문)
이후 반복문을 통해 배열에서 가장 작은 값과, 해당 값의 인덱스(= min_idx)를 추출한다.
2-2. arr의 최솟값의 인덱스 제외, 나머지를 answer 배열로 옮기기
//2. arr의 최소값 제외, 나머지 answer 배열로 옮기기
int idx =0;
for(int i=0; i<arr.length; i++){
if(min_idx != i){
answer[idx] =arr[i];
idx++;
}
구한 최솟값의 인덱스를 이용해 answer 배열에 arr 배열의 최솟값 제외 나머지 요소를 넣는다.
반복문의 i를 arr의 인덱스를 훑는 변수로 이용하고,
따로 idx 변수를 생성해 answer의 인덱스 변수로 사용했다.
if문을 이용해 min_idx가 arr 인덱스 (= i)와 같을 때는 arr [i]의 값을 넘어가게 해서 최솟값이 answer 배열에 들어가지 않도록 했다.
전체 코드
class Solution {
public int[] solution(int[] arr) {
int[] answer;
if(arr.length == 1){
answer = new int[] {-1};
}else{
//1. 최소값과 해당 인덱스 판단
int min = arr[0];
int min_idx = 0;
answer = new int[arr.length-1];
for(int i=0; i<arr.length; i++){
if(arr[i] < min ){
min = arr[i];
min_idx = i;
}
}
//2. arr의 최소값 제외, 나머지 answer 배열로 옮기기
int idx =0;
for(int i=0; i<arr.length; i++){
if(min_idx != i){
answer[idx] =arr[i];
idx++;
}
}
}
return answer;
}
}
'Study > PS' 카테고리의 다른 글
[PS/Java] 프로그래머스 Lv.1 : 가운데 글자 가져오기 (0) | 2023.01.18 |
---|---|
[PS/Java] 프로그래머스 Lv.1 : 없는 숫자 더하기 (0) | 2023.01.18 |
[PS] 백준 1546번: 평균 (Java 11) (0) | 2022.11.20 |
[PS] 백준 2577번: 숫자의 개수 (Java 11) (0) | 2022.11.20 |
[PS] 백준 2908번: 상수 (Java 11) (0) | 2022.11.20 |