반복문을 이용한 배열의 최소값 구하기

Lemon·2022년 4월 27일
0

JavaScript

목록 보기
9/17
post-thumbnail

📝문제

findSmallestElement 함수를 구현해 주세요.

  • findSmallestElement 의 arr 인자는 숫자 값으로만 이루어진 배열입니다.
  • arr 의 값들 중 가장 작은 값을 리턴 해주세요.
  • 만일 arr 가 비어있으면 0을 리턴 해주세요.
  • 다음과 같은 배열이 인자(input)으로 들어왔다면 1이 리턴 되어야 합니다.
    [20, 200, 23, 1, 3, 9]

초기 작성 코드

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

console.log(findSmallestElement([20, 200, 23, 1, 3, 9]));

여기서 멈췄다...
arr이 비어있으면 0을 리턴해라는 간단하게 구현 가능했는데 문제는 for문을 사용해서 배열을 최소값을 구하는 것이었다😅 바로 떠오르지 않아서 고민하다가 다시 구글링을 시작했다.


구글링 후 코드

배열의 최소값을 검색해보니 두가지 방법이 나왔다.

첫번째 : Math.min() 을 이용하는 방법
두번째 : for문을 이용해서 배열을 재 할당하는 방법

간단하게 구현가능한 것을 Math.min()이었지만 과제는 반복문 파트에서 나온 것이라 반복문으로 구현하고, 이후에 Math.min()으로도 구현해보았다.

1. for문을 이용해서 배열을 재 할당하는 방법

function findSmallestElement(arr) {

  let min = arr[0];

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

}

console.log(findSmallestElement([20, 200, 23, 1, 3, 9])); // 1

처음에 이해가 힘들어서 한 줄 씩 뜯어보았다.

let min = arr[0]; 

인자로 받은 [20, 200, 23, 1, 3, 9] 배열 값들의 0번째 인덱스를 min이라는 변수에 담는다 → min과 arr 인자의 배열값들을 비교하기 위함이다.

for(let i = 0; i < arr.length; i++){
    if(min > arr[i]){
      min = arr[i]; 🌟min보다 작으면 현재 index값을 할당
    }
  }
return min;

만약 min의 값이 arr[i]보다 크다면 min에 현재 index의 배열값이 들어간다.

진행 순서를 풀어써보면 아래와 같다.

min(20) > arr1false → return min; 📢 return 20
min(20) > arr2false → return min; 📢 return 20
min(20) > arr3true → min = arr3 📢 return 1
min(1) > arr4false → return min; 📢 return 1
📌 min(1) > arr5 ⇒ false → return min; 📢 return 1

따라서 최종으로 1 이 출력된다.

이해하고나니 이렇게 쉬운걸.. 스스로 생각해낼 수 있을까싶긴하다(아찔)


2. Math.min() 을 이용하는 방법

let arr = [20, 200, 23, 1, 3, 9]
const minValue = Math.min(...arr)

console.log(minValue); // 1

Math.min() 함수는 파라미터로 입력받은 숫자들 중 최소값을 구해서 리턴하는 함수이다.
ES6 문법인 전개연산자 (...)을 사용해서 배열을 하나씩 꺼낸다.
위의 코드에서 Math.max(...arr)Math.max(1, 2, 3, 4, 5) 는 동일한 코드이다.


🧱삽질했던 부분

  • lenght...length 오타
    error에 0을 찾을 수 없다고 나와서 대체 왜~!! 했는데 오타였다... 금방 찾긴 했지만 오타 때문에 삽질하는게 이런기분이구나 싶었던 순간이었다ㅋㅋ
  • 습관적인 return
    min에 arr[i]를 할당하는 조건문에 return을 줬다. 조금만 생각해도 당연한건데...(아찔) 이래서 다들 코드 한줄한줄 생각하면서 치라고 하시는구나 싶었다.
  • 습관적인 () 호출
    const 로 만든 변수 minValue를 자꾸 minValue()라고 쳐서 값이 나오지 않았다! 습관적으로 당연히 이거지하면서 치는 버릇을 고쳐야겠다고 다짐한다 💪🏻

코드 한줄 한줄 꼼꼼하게 생각하고 확인하자 실수를 줄이자!


참고🙏🏻
https://velog.io/@youngloper77/반복문으로-최소값-구하기
https://hianna.tistory.com/487

profile
프론트엔드 개발자 가보자고~!!

0개의 댓글