198. House Robber

2025. 10. 13. 18:49·Coding Test/LeetCode

난이도: 중간(Medium)

Link: LeetCode 198

풀이 날짜: 2025/10/13

 

1. 문제 이해

여러 집이 일렬로 있을 때, 도둑이 인접한 두 집을 동시에 털 수 없다는 규칙 아래에서, 훔칠 수 있는 금액의 최댓값을 구하는 문제다.

혼동하지 말아야 할 것은, 연속된 집은 털 수 없지만, 중간에 몇 집을 건너뛰어도 된다는 것이다.

 

2. 접근 아이디어 및 자료구조

이 문제는 전형적인 1D DP 구조를 가지는데, 인접한 집을 털 수 없으므로

  • i번째 집을 털었을 때의 최댓값 = i-2번째까지 턴 최댓값 + 현재 집 금액 이다.
  • i번째 집을 털지 않을 경우 = i-1번째까지 턴 최댓값

이 두가지 값을 비교하여 더 큰 값을 누적하는 방식으로 진행한다.

이를 점화식으로 표현하면 아래와 같지만, 

dp[i] = max(dp[i-1], dp[i-2] + nums[i])

 

배열 대신 변수 두 개(prev1, prev2)만 사용해서 O(1) 공간으로 최적화가 가능하다.

 

3. 풀이 코드

var rob = function(nums) {
  let prev1 = 0; // i-1번째까지 최댓값
  let prev2 = 0; // i-2번째까지 최댓값

  for (const num of nums) {
    const temp = Math.max(prev1, prev2 + num); // 현재 집 털지 말지 결정
    prev2 = prev1; // 다음 스텝을 위해 이전값 업데이트
    prev1 = temp;
  }

  return prev1; // 최종 최대 금액
};

 

prev1과 prev2는 지금까지 누적한 최댓값을 저장하는 역할을 한다.

 

반복문의 temp = Math.max(prev1, prev2 + num) 코드에서 아래의

  • prev1 → 바로 전 집까지 누적한 최댓값 (이번 집 털지 않는 경우)
  • prev2 + num → 전전 집까지 누적한 최댓값 + 이번 집 금액 (이번 집 털 경우)

두 값 중 큰 값을 prev1에 temp를 할당하면서 누적 최댓값을 갱신한다.

즉, 반복이 끝나면 prev1에는 마지막 집까지 고려한 전체 최대 누적 금액이 저장되는 것이다.

구분 복잡도 설명
시간 O(n) 모든 집을 한 번씩 확인
공간 O(1) 두 변수만 사용

 

4. 요점 정리

  • 핵심: 인접한 집을 털 수 없는 규칙 → DP 점화식
  • 공간 최적화: prev1, prev2 변수만으로 1D DP 구현
  • 시간 복잡도 O(n), 공간 복잡도 O(1)

 

즉, “탐색 구조는 DP, 상태 저장만 최적화”한 전형적인 1D DP 문제이다.

'Coding Test > LeetCode' 카테고리의 다른 글

88.Merge Sorted Array  (0) 2025.10.15
322.Coin Change  (0) 2025.10.13
70. Climbing Stairs  (0) 2025.10.13
103. Binary Tree Zigzag Level Order Traversal  (0) 2025.10.11
102. Binary Tree Level Order Traversal  (0) 2025.10.11
'Coding Test/LeetCode' 카테고리의 다른 글
  • 88.Merge Sorted Array
  • 322.Coin Change
  • 70. Climbing Stairs
  • 103. Binary Tree Zigzag Level Order Traversal
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML & CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    Time complexity and Space complexity
    Network
    이벤트
    모던 자바스크립트 Deep Dive
    Javascript Essentials
    testing
    indie hacker
    Binary Tree BFS
    자바스크립트 딥다이브
    Shared resources
    need a database
    프론트엔드 성능 최적화 가이드
    딥다이브
    database
    DOM
    자바스크립트
    polylingo
    스코프
    커리어
    CPU scheduling algorithm
    js pattern
    Data Structure
    mobile app
    leetcode
    How memory manage data
    TCP/IP
    structure of os
    Threads and Multithreading
    VoiceJournal
    Operating System
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
198. House Robber
상단으로

티스토리툴바