프론트엔드 개발자가 될거야./js

[TIL] Today I Learned : for문 - findSmallestElement 함수

정니정은니 2022. 6. 22. 20:38

많이 공부했다고 생각했는데...

문제 푸는데 많이 막혔다!

 

먼저, for문에 대해 알아보자.

for문

for 문을 사용하면 코드를 원하는 만큼 반복시킬 수 있다.

실행 조건에 따라 언제부터 언제까지 반복하게 될 것이라고 알려주면 된다.

 

반복문 내의 조건문

반복문과 조건문은 함께 많이 쓰인다. 잘 이해해두어야 한다!

예시를 함께 보자.

const home = "대전"; 
let cities = ["서울", "대전", "대구", "대전", "광주", "대전"];
 
for (let i = 0; i < cities.length; i++) {    
  if (cities[i] === home) {      
    console.log("아, "+ cities[i] +" 사시는군요");    
  } 
}

for (var i = 0; i*<*cities.length; i++)에서 가운데 비교연산자를 주의하자! 

<= 가 아닌 < 를 사용하고 있다.

그 이유는?

배열의 길이는 6이므로 6번의 반복문이 실행되어야 한다.

그런데 <= 를 사용하면 i 는 0,1,2,3,4,5,6 까지 실행되어 총 7번의 반복문을 실행하게 되는 것이다!

 

과제로 나왔던 문제...

몇시간을 고민했는지 모른다.. 쥬르륽...😂

 

👀 문제 👀

findSmallestElement 함수를 구현해 주세요.

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

❌내가 생각했던 풀이❌

arr 의 값들 중 가장 작은 값을 리턴해주라고 해서

옆에 있는 값들이랑 비교하면 되겠다! 해서

arr[i] > arr[i+1] 어쩌고 저쩌고 해서 만들어보려고 했지만

도무지 감이 잡히지 않았다..

 

✍🏻옳은 풀이 방법✍🏻

function findSmallestElement(arr) {
  // your code here
  if (arr.length === 0) {
    return 0
  } else {
    let min = arr[0]; // 임의로 최솟값을 설정해주자!!!
    for (let i = 0; i < arr.length; i++) {
      if (arr[i] < min) {
        min = arr[i];
      } else {
        min = arr[0];
      }
    } 
    return min;
  }  
}

let min = arr[0]; 이렇게 임의로 최솟값을 설정해서

배열의 요소들과 하나하나 비교해주면서

min보다 더 작으면 그 요소로 최솟값을 재할당해주는 방법이다.

 

예를 들어 arr 가 [20, 200, 23, 1, 3, 9] 라고 치자.

let min = arr[0] 에서 일단 min = 20 으로 설정해두었다.

근데 반복하다가 i = 3이 되었을 때,

arr[3] 즉, 1 은 현재 min인 20보다 작으니

if문이 true가 되어

min = arr[3] = 1 로 재할당해주는 것이다.

이렇게하면 문제를 풀 수 있다........!!!!!

 

어렵지만 뿌듯하다 ㅎ ㅡ ㅎ