121. Best Time to Buy and Sell Stock

2025. 10. 15. 15:11·Coding Test/LeetCode

난이도: 쉬움 (Easy)

링크: LeetCode 121

풀이 날짜: 2025/10/15

 

1. 문제 이해

주식 가격 배열 prices가 주어질 때, 한 번의 매수와 매도로 얻을 수 있는 최대 이익을 구하는 문제이다.

  • 매수는 반드시 매도보다 먼저 해야 함.
  • 매도는 한 번만 가능.

 

 

2. 접근 아이디어

한 번의 거래로 최대 수익을 내야 하므로, 

  1. 최소 가격을 추적 - 현재까지 본 가격 중 가장 작은 값을 기록 → minPrice
  2. 현재 가격으로 가능한 최대 이익 계산 - prices[i] - minPrice → 지금 팔면 얻을 수 있는 최대 이익
  3. 최대 이익 갱신 - maxProfit = Math.max(maxProfit, prices[i] - minPrice)
  4. 최소 가격 갱신 - minPrice = Math.min(minPrice, prices[i])

즉, 배열을 한 번만 순회하면서 현재까지의 최적 매수와 최대 이익을 동시에 관리하는 방식이다.

 

3. 풀이코드

var maxProfit = function(prices) {
  let maxProfit = 0;
  let minPrice = prices[0];

  for(let i=1; i<prices.length; i++) {
    // 현재 가격으로 얻을 수 있는 최대 이익
    maxProfit = Math.max(maxProfit, prices[i] - minPrice);
    // 최소 가격 갱신
    minPrice = Math.min(minPrice, prices[i]);
  }  

  return maxProfit;
};
  • 시간 복잡도: O(n) — 배열 한 번 순회
  • 공간 복잡도: O(1) — 추가 배열 없이 변수만 사용

 

4. 핵심 포인트

  • 배열을 순회하며 최소 가격과 최대 이익을 동시에 갱신한다.
  • 한 번만 순회하므로 효율적이다. 시간복잡도 O(n).
  • 매수-매도 시점 조건을 변수 관리로 자연스럽게 처리한다.

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

80. Remove Duplicates from Sorted Array II  (0) 2025.10.15
189. Rotate Array  (0) 2025.10.15
169.Majority Element  (0) 2025.10.15
26.Remove Duplicates from Sorted Array  (0) 2025.10.15
27.Remove Element  (0) 2025.10.15
'Coding Test/LeetCode' 카테고리의 다른 글
  • 80. Remove Duplicates from Sorted Array II
  • 189. Rotate Array
  • 169.Majority Element
  • 26.Remove Duplicates from Sorted 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
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바