122. Best Time to Buy and Sell Stock II

2025. 10. 15. 17:18·Coding Test/LeetCode

난이도: 중간 (Medium)

링크: LeetCode 122

풀이 날짜: 2025/10/15

 

1. 문제 이해

여러 날 동안의 주식 가격이 주어졌을 때, 여러 번의 거래(사고팔기)를 통해 얻을 수 있는 최대 이익을 구하는 문제다.

단, 동시에 여러 주식을 보유할 수 없고, 하루에 사고 그다음 날 파는 식으로 거래해야 한다.

 

즉, 가격이 오르면 그 차익을 모두 더하고, 가격이 떨어지면 아무 행동도 하지 않는 방식으로 최대 이익을 계산한다.

 

2. 풀이 아이디어

이 문제의 핵심은 “모든 상승 구간의 이익을 더하는 것”이다.

 

가격이 오를 때마다 팔았다가 다시 사는 것이 전체적으로 봤을 때 최대 이익을 보장한다.

만약 가격이 계속 오르는 경우, 예를 들어 [1,2,3,4] 라면, 

  • 한 번만 거래하면: 4 - 1 = 3
  • 여러 번 거래하면: (2-1) + (3-2) + (4-3) = 3 -> 결과는 동일하다.

하지만 만약 가격이 중간에 떨어졌다가 다시 오르는 경우, 예를 들어 [1, 5, 3, 6]이라면,

  • 한 번 거래: 6 - 1 = 5
  • 여러 번 거래: (5 - 1) + (6 - 3) = 7 → 더 큰 이익!

모든 상승 구간에서 차익을 합산하면 결과적으로 최적의 해가 된다. 주가가 오를 때마다 파는 행위는 결국 전체 그래프의 오름폭을 모두 더하는 것과 같기 때문이다.

 

3. 풀이코드

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
  let result = 0;

  for (let i = 1; i < prices.length; i++) {
    const gap = prices[i] - prices[i - 1];
    if (gap > 0) result += gap;
  }

  return result;
};
구분 복잡도 설명
시간 복잡도 O(n) 한 번의 순회로 최대 이익 계산
공간 복잡도 O(1) 추가 메모리 거의 없음

 

4. 핵심 정리

  • 한 번만 거래하는 경우(문제 121)는 “최저점에 사고 최고점에 판다”를 찾는 문제다.
  • 여러 번 거래 가능한 경우(이 문제)는 “모든 오름폭을 더한다”로 단순화된다.
  • 여러 번 거래가 가능한 이유는, 하락 구간에서 손실을 피하면서 오르는 구간마다 이익을 실현할 수 있기 때문이다.

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

45. Jump Game II  (0) 2025.10.15
55. Jump Game  (0) 2025.10.15
80. Remove Duplicates from Sorted Array II  (0) 2025.10.15
189. Rotate Array  (0) 2025.10.15
121. Best Time to Buy and Sell Stock  (0) 2025.10.15
'Coding Test/LeetCode' 카테고리의 다른 글
  • 45. Jump Game II
  • 55. Jump Game
  • 80. Remove Duplicates from Sorted Array II
  • 189. Rotate Array
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 &amp; CSS
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
122. Best Time to Buy and Sell Stock II
상단으로

티스토리툴바