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
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바