최소값 찾기

YJ·2023년 1월 12일
0

함수 findSmallestElement의 인자로 받는 arr는 숫자 값으로만 이루어진 배열이다.
arr의 값들 중 가장 작은 값을 반환하고, 만일 arr가 비어있으면 0을 반환한다.

처음 작성한 코드는

function findSmallestElement(arr) {
  if (arr.length === 0) {
    return 0;
  }
  
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] > arr[i + 1]) {
      return arr[i + 1];
    } else {
      return arr[i];
    }
  } 
}

여기서 생긴 첫번째 오류는
만약 arr.length가 5라면 index는 4번까지만 존재하는데, arr[i + 1]로 인해 arr[5]를 호출해야하는 문제가 발생하므로 undefined가 출력된다.

두번째 오류는
for loop이 돌면서 return 값으로 계속 arr[i] 또는 arr[i + 1]을 반환하므로 결과가 하나가 아닌 여러개가 출력된다.

예를 들어,
arr = [23, 5, 134, 9, 245, 49] 라면,
결과값으로 5, 5, 9, 9, 49, 49, undefined 가 출력되는 것을 확인할 수 있다.

그러므로 기준이 되는 인자를 변수에 할당하고, 다른 인자와 비교했을 때 작은쪽의 값을 다시 기존의 변수에 할당해주면서 for loop이 돌아야 한다.

코드를 다시 작성해보자.
기준이 되는 배열의 첫번째 인자에 변수 result를 할당하고, 순서대로 숫자의 크기를 비교하면서 작은 쪽의 인자를 다시 변수인 result에 할당하는 과정을 거쳐야 한다.

function findSmallestElement(arr) {
  if (arr.length === 0) {
    return 0
  }

  let result = arr[0];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < result) {
      result = arr[i];
    } 
  }
  return result;  
}
profile
Hello

0개의 댓글