제일 작은 수 제거하기

김정동·2021년 11월 23일
0

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

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

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

배열 안에서 가장 작은 값 찾기, 초기값 설정, min 을 만들기
i 가 1인부터는 0번일경우 i와 min이 같기때문에 비교할필요가 없음

function solution(arr) {    
  const answer = [];
  let min = arr[0];
    for(let i =1; i< arr.length; i++){
        console.log(arr[i], min)
    }
    return answer;
}

i인덱스 값과 min을 가져옴
이제 비교해서 작다고 판단되면 min보다 작은 값이 있으니까 그걸 가져오게 하면 됨

function solution(arr) {    
    const answer = [];
    let min = arr[0];
      for(let i =1; i< arr.length; i++){
          if(arr[i] < min){
              min = arr[i]
          }
      }
      return answer;
  }

arr[i]에서 min보다 작은 수가 발견될 경우 min에 저장됨
일단 작은 수는 가져왔으니 작은수는 제거하고 나머지 데이터를 가져와서 리턴시키면 됨
for문을 사용해보자
여기서 동일하지 않은 값만 새로운 배열에 넣어주면됨
그리고 마지막 리턴 부분에 길이가 0이면 -1을 출력하고 아니면 answer를 출력

function solution(arr) {    
    const answer = [];
    let min = arr[0];
      for(let i =1; i< arr.length; i++){
          if(arr[i] < min){
              min = arr[i]
          }
      }
      for(let i = 0; i < arr.length; i++){
        if(arr[i] !== min){
            answer.push(arr[i])
        }
      }
      return answer.length === 0 ? [-1] : answer;
  }

코드를 줄여보기
Math.min(6, 4, 3, 2,) 을 사용하면 제일 작은 값만 가져옴
반대로는 Math.max 가장 큰 수를 가져옴
근데 배열은 가져오지 못함 -> NaN을 가져옴
그래서 배열을 가져오고 싶다면
a =[1, 2, 3, 4, 5]
Math.min(...a) 이럼 가져올 수 있게 되서 for문을 사용안해도됨

function solution(arr) {    
    const answer = [];
    const min = Math.min(...arr);

      for(let i = 0; i < arr.length; i++){
        if(arr[i] !== min){
            answer.push(arr[i])
        }
      }
      return answer.length === 0 ? [-1] : answer;
  }

메서드 사용해보기
Math.min만 사용해도 가장 작은 값을 가져올 수있음
arr을 filter로 돌려서 조건식에 해당되는 값만 가져옴(제일 작은 숫자가 아닌 것만)
그리고나서 빈배열의 예외처리까지 하면됨

function solution(arr) {    
    const answer = [];
    const min = Math.min(...arr);

    const answer = arr.filter(num => {
        return num !== min
    })
    return answer.length === 0
    ? [-1]
    :answer
}
profile
개발자 새싹🌱 The only constant is change.

0개의 댓글

관련 채용 정보