[TIL]자바스크립트 배열 속 최소값 구하기

소진수·2021년 7월 8일
2

JAVASCRIPT

목록 보기
2/10
post-thumbnail
* 이미 언급한 내용은 초록색으로 작성했습니다.
* 새로 이해한 내용은 노란색으로 작성했습니다.
* 추가적인 속성 내용은 회색으로 작성했습니다.


🤷🏻‍♂️ "반에서 가장 키 작은 애 나와"


"반에서 가장 키 작은 애를 알려줘, 그리고 만약에 반에 아무도 없으면 없다고 알려줘"
문제의 조건은 이러했다. 자 그러면 1시간동안 작성한 코드를 보자

function findSmallestElement(arr) {
  // your code here
  if(arr.length === 0) {return 0;}
  else {
    let lil = arr[0];
    for (i = 0; i < arr.length; i++) {
      if ( lil > arr[i]) {
        lil = arr[i];
      }
    } return lil;
  }
}

매우 간단하지 아니한가. 하지만 이 친구는 나와 수요일 저녁을 함께 불태워줬다.

이해하기


문제를 토대로 논리를 생각해보았다.

1. 만약에 반에 아무도 없다면 알려줘

if (arr.length === 0) { return 0;}
- `arr.length`: 배열의 길이를 구하는 함수(반 학생의 총원을 구한다)

2. 있으면 반에서 가장 키 작은 애를 알려줘 찾지마ㅠ

  • 이해를 위해 한 줄씩 기어보자
  • 아직은 모르는 키 작은애(arr[0])를 김릴(변수lil)이라고 일단 부를게
  else {
    let lil = arr[0];
  • 그런데 누가 제일 작은지 모르니까 1번부터 마지막 순번까지 확인해보자(for구문) 어떻게?
    for (i = 0; i < arr.length; i++) {
  • 만약에 너네반 모두를 한 명씩(arr[i]) 반복하면서 확인할 때(if구문),
    - 김릴이 너보다 크면 너가 김릴이야
      if ( lil > arr[i]) {
        lil = arr[i];
      }
  • 반복해서 확인하는거 끝났으면 이제 알려줘(return)
  } return lil;

3. 만약 가장 큰 친구를 찾고 싶다면?

  • if구문 조건에 lil > arr[i]arr[i] > lil 로 변경하면 된다

4. 이 코드의 중요한 부분!

  • 최솟값 변수 설정 & 배열의 임의 값 할당
    배열의 길이만큼 반복문을 실행하고 가상의 최솟값을 각 배열의 원소와 비교한다. 만약 변수 lil이 더 크면 새로운 원소를 재할당을 해준다. 그리고 변수 lil이 더 작을때는 그대로 값을 유지한다.

Binary Search Tree 구조


위 문제를 풀고나서 사용된 코드가 굉장히 유용하다고 느꼈다. 궁금함을 참지 못하고 구글링을 하던 중, 문제에서 사용된 코드의 알고리즘이 Binary Search Tree 라는 걸 알게 되었다. 그래서 그게 뭔데?
vue image

정의

  • 이진 트리의 일종으로, 노드의 왼쪽 가지에는 노드의 값보다 작은 값들만 있고, 오른쪽 가지에는 큰 값들만 있도록 구성되었다. 자식 노드들도 동일한 방법으로 정렬된다. 오늘은 이해만 하고 넘어가자

결론🙆🏼‍♂️


유용하다. 굉장히 유용하다. 그리고 어렵다.

profile
느려서 바쁘다

0개의 댓글