| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
- 타입스크립트
 - 자바스크립트 연결리스트
 - 자바스크립트 문제 풀이
 - 자바스크립트 알고리즘 문제
 - 프론트엔드
 - 제로베이스
 - stack문제
 - lodash
 - leetcode
 - 자바스크립트코딩테스트
 - leetcode문제풀이
 - til
 - HTML
 - 알고리즘문제풀이
 - 자바스크립트 알고리즘
 - Next
 - 리액트쿼리
 - 자바스크립트 문제
 - JS
 - 자바스크립트 문제풀이
 - CSS
 - 리액트
 - next13
 - NPM
 - 자바스크립트
 - react
 - Next.js13
 - Baekjoon
 - JavaScript
 - 프로그래머스
 
- Today
 
- Total
 
코드노트
LeetCode 11. Container With Most Water 자바스크립트 문제 풀이 본문
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을 통해서 비교해도 좋을것 같다.
'Code note > 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
| Leetcode 66. Plus One / Easy / 자바스크립트 문제 풀이 (2) | 2022.10.13 | 
|---|---|
| 프로그래머스 숫자의 표현 자바스크립트 문제 풀이 (0) | 2022.10.06 | 
| 알고리즘 문제 오답풀이_1 (1) | 2022.09.29 | 
| 프로그래머스 최솟값 만들기 자바스크립트 풀이 (0) | 2022.09.29 | 
| LeetCode 8. String to Integer (atoi) 자바스크립트 문제 풀이 (1) | 2022.09.27 |