코딩 테스트/LeetCode

[4월 15일] container-with-most-water

2023. 4. 15. 09:23
목차
  1. 📙 1. 문제
  2. 문제 설명
  3. 제한 사항
  4. 풀이 1 : 시간초과 풀이
  5. 풀이 2 : 투 포인터 사용
  6. 🤔 2. 느낀 점
  7. 🤩 3. 한 번 더 짚고 갈 점

📙 1. 문제

Link : https://leetcode.com/problems/container-with-most-water/description/

문제 설명

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.
Notice that you may not slant the container.

제한 사항

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

 

풀이 1 : 시간초과 풀이

/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {
    let answer = 0;
    for(let i=0;i<height.length;i++){
        for(let j=0;j<i;j++){
            answer = Math.max((i-j)*Math.min(height[i],height[j]),answer)
        }
    }
    return answer
};

  • 혹시나 했지만, 역시나 시간 초과가 떴다.
  • 시간 복잡도는 O(n**2)이고, n의 최대가 10^5이니, 최대 반복 수 10^10이니 그럴 만도..

풀이 2 : 투 포인터 사용

/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {
    let max = 0;
    let start = 0;
    let last = height.length - 1;
    
    while (last - start > 0) {
        const standard = height[last] > height[start] ? height[start] : height[last];
        const gap = (last - start) * standard;
              
        height[last] > height[start] ? start++ : last--;
        max = max < gap ? gap : max;
    }
    return max;
};

  • 투 포인터를 이용하면 간단하게 풀리는 문제였다.
  • 너비가 크려면 x축과 y축 모두 커야 한다. x축을 벌리기 위해 start와 last변수를 양 쪽 끝에 두고 시작을 했다. y축은 각각의 height배열이 가지고 있기에 하나씩 순회하면서 비교할 것이다.
  • height [start]와 height [last] 중 작은 값을 standard변수에 넣고, 두 사이의 거리(gap)를 구한다. 두 값 중 start가 작다면 start++, last가 작다면 last--하여 점점 좁혀준다.

🤔 2. 느낀 점

'어떤 알고리즘'을 사용해야 하는 지만 알면 쉽게 풀리는 문제였다. 그러기 위해서는 '어떤 알고리즘'이 있는지, 그리고 문제에서는 어떻게 적용이 되는지 꾸준히 문제를 풀어보며 숙달해야겠다고 생각했다.

 

🤩 3. 한 번 더 짚고 갈 점

부피가 커야 한다 => 양 두 지점이 멀리 떨어져 있어야 한다 => 투 포인터!

저작자표시 (새창열림)

'코딩 테스트 > LeetCode' 카테고리의 다른 글

[4월 14일] Palindrome Number  (0) 2023.04.14
[4월 14일] String to Integer  (0) 2023.04.14
[4월 11일] Reverse Integer  (0) 2023.04.11
[4월 7일] Longest Palindromic Substring (Bruth Force)  (0) 2023.04.07
[4월 6일] Longest Substring Without Repeating Characters  (0) 2023.04.06
[4월 6일] Add Two Numbers  (0) 2023.04.06
[4월 2일] Two Sum  (0) 2023.04.02
  1. 📙 1. 문제
  2. 문제 설명
  3. 제한 사항
  4. 풀이 1 : 시간초과 풀이
  5. 풀이 2 : 투 포인터 사용
  6. 🤔 2. 느낀 점
  7. 🤩 3. 한 번 더 짚고 갈 점
'코딩 테스트/LeetCode' 카테고리의 다른 글
  • [4월 14일] Palindrome Number
  • [4월 14일] String to Integer
  • [4월 11일] Reverse Integer
  • [4월 7일] Longest Palindromic Substring (Bruth Force)
피터s
피터s
1년차 프론트엔드 개발자입니다 😣 아직 열심히 배우는 중이에요! 리액트를 하고있어요 :) - gueit214@naver.com - https://github.com/gueit214
피터s
피터의 성장기록
피터s
전체
오늘
어제
  • 분류 전체보기 (200)
    • 코딩 테스트 (25)
      • 프로그래머스 (16)
      • LeetCode (8)
      • 백준 (1)
    • 개발 독서 일지 (1)
    • 기업 분석 (4)
    • 개발 일지 (19)
      • 최신기술 도전기 (1)
      • 에러 처리 (5)
      • 개발 일지 (12)
    • 개발 일상 (36)
      • 개발 회고 (22)
      • 개발 이야기 (12)
      • 개발 서적 (1)
    • 취업 관련 지식 (11)
    • 알고리즘 (17)
    • WebProgramming (84)
      • WebProgramming (8)
      • HTML (5)
      • CSS (8)
      • JS (21)
      • React (40)

블로그 메뉴

  • About
  • 2022년 개발 성장기
  • 앞으로의 계획
  • github
  • 일상 blog

공지사항

인기 글

태그

  • BFS
  • dfs
  • Kakao Tech Internship
  • 1년 회고
  • 반복문
  • 스터디 후기
  • 카카오
  • 누적합
  • 구름톤
  • 구름
  • 카카오 채용연계형 인턴십
  • Retry
  • KAKAO BLIND
  • 함수
  • Union-find
  • 해커톤
  • 개발 일상
  • 개발 is life
  • LV2
  • lv3
  • 1일 1커밋 후기
  • 개발 회고

최근 댓글

최근 글

hELLO · Designed By 정상우.
피터s
[4월 15일] container-with-most-water
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.