김치킨 195
읽고 쓰는 프로그래머
김치킨 195
전체 방문자
오늘
어제
  • 분류 전체보기 (46)
    • 읽다 (1)
    • 쓰다 (12)
      • 자기계발 (6)
      • 지식관리 (1)
      • 글쓰기 (3)
      • 생각 (2)
    • 개발하다 (1)
      • 개발 (1)
    • 기타 (0)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 리눅스
  • react-native
  • 파인만 테크닉
  • 글쓰기
  • 컨테이너
  • docker build
  • ReactNative
  • docker images
  • 부자들의 초격차 독서법
  • 도커
  • wls2
  • Docker
  • RN
  • WSL2
  • PM2
  • 리액트네이티브
  • vsCode
  • 아웃풋트레이닝
  • 아웃풋 트레이닝
  • 네트워크 격리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김치킨 195

읽고 쓰는 프로그래머

카테고리 없음

릿코드(leetcode)---42 Trapping-Rain-Water

2022. 6. 23. 14:28

문제 링크

42. Trapping Rain Water

picture 1

그림과 같은 지형에 비가 왔다고 가정했을 때 고여있을 물의 부피를 구하는 문제

풀이

지형을 3가지 영역으로 나눠서 볼 수 있다.

picture 2

발그림 ㅈㅅ

  • 가장 높은 봉우리를 기준으로 영역을 구분한다.
  • 1번 영역은 시작부터 가장 높은 봉우리까지이다.
    • 이전 가장 높은 봉우리와 차이만큼 물을 저장할 수 있다.
    • 이전 봉우리보다 높은 봉우리가 나타면 높은 봉우리를 갱신한다.
  • 2번 영역은 가장 높은 봉우리가 2개 이상일 때 나타난다.
    • 2번 영역에서는 가장 높은 봉우리와의 차이만큼 물을 저장한다.
  • 3번 영역은 1번 영역과 같다.(순서만 다르다.)
  • 전체를 순회하며 영역에 따라 계산해주면 된다.
/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
  const max = Math.max(...height)
  const firstIdx = height.indexOf(max)
  const lastIdx = height.lastIndexOf(max)

  let result = 0
  let highest = 0

  const calc = current => {
    if (highest > current) result += highest - current
    else highest = current
  }

  for (let i = 0; i < firstIdx; i++) {
    calc(height[i])
  }

  highest = 0
  for (let i = height.length - 1; i >= lastIdx; i--) {
    calc(height[i])
  }

  for (let i = firstIdx; i < lastIdx; i++) {
    result += max - height[i]
  }

  return result
}
    김치킨 195
    김치킨 195
    읽고, 쓰고, 개발한 기록을 보관합니다.

    티스토리툴바