코드노트

LeetCode 11. Container With Most Water 자바스크립트 문제 풀이 본문

Code note/자바스크립트 알고리즘 문제풀이

LeetCode 11. Container With Most Water 자바스크립트 문제 풀이

코드노트 2022. 9. 30. 17:33

문제 설명

더보기

You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]).

Find two lines that together with the x-axis form a container, such that the container contains the most water.

Return the maximum amount of water a container can store.

 

height길이 의 정수 배열이 제공 됩니다 n. 선의 두 끝점이 및 가 되도록 n수직선이 그려집니다.

ith(i, 0)(i, height[i])

컨테이너에 가장 많은 물이 포함되도록 x축과 함께 컨테이너를 형성하는 두 개의 선을 찾으십시오.

컨테이너가 저장할 수 있는 최대 물의 양을 반환 합니다 .

입력: height = [1,8,6,2,5,4,8,3,7]
 출력: 49
 설명: 위의 수직선은 배열 [1,8,6,2,5,4,8]로 표시됩니다. ,3,7].
 이 경우 컨테이너가 담을 수 있는 최대 물 영역(파란색 부분)은 49개입니다.

문제 요약

* 두개의 컨테이너 사이의 담을 수 있는 최대 물의 영역(넓이)를 구하라

- 배열의 요소들중 두 개를 차례대로 순회한다.

- 두 개의 index 사이의 값과 두 개의 요소 중 낮은 수를 곱한다

- 차례대로 곱한값들을 비교해서 가장 높은 값을 출력한다.

 

 

처음 문제를 보고 또 이해를 잘 못했다. 코딩 문제들을 왜 문제들을 어렵게 설명하고 꼬아놓는지...ㅠㅠ

우선 두개의 Index를 모두 탐색해야하기 때문에

첫 index를 증가시키고 끝 index값을 증감 시키면서 순회해야한다.

그리고 두 개의 index 값을 비교하여 낮은 값과 두 index 사이의 차를 구해서 곱하면 된다.

 

 

문제 풀이

var maxArea = function (height) {
  let left = 0; // 첫 index
  let right = height.length - 1; // 끝 index
  let maxSize = 0; // 가장 큰 값을 저장할 변수

  while (left < right) { // 첫 index가 끝 index보다 클때까지 순회
    const heightLeft = height[left],
      heightRight = height[right]; // 두 변수에 배열의 요소를 할당
    const width = right - left; // 넓이 구하기 (index 끝 값 - index 첫 값)
    const size = width * Math.min(heightLeft, heightRight); // 넓이 * 두 요소 중 낮은 값
    maxSize = Math.max(maxSize, size); // maxSize에는 큰 값들을 계속 업데이트 시킨다.

    if (heightLeft <= heightRight) { // 첫 요소 값이 끝 요소 값보다 작거나 같으면 증가, 증감 시킨다.
      left++;
    } else {
      right--;
    }
  }
  return maxSize;
};

- 첫 위치, 끝 위치를 통해서 증가시키고 증감시키면서 비교할 수 있는게 큰 레퍼런스가 될거 같다.

- 그리고 지금까지 큰 수 또는 작은수를 저장할 때에는 비교연산자를 통해서 할당시켰는데 이제는 Math, max,min을 통해서 비교해도 좋을것 같다.