|
1 |
| -/* |
2 |
| -Time complexity: O(n) |
3 |
| -Space complexity: O(1) |
4 |
| -
|
5 |
| -문제 설명: |
6 |
| -- 주어진 배열 `prices`에서, i <= j인 두 인덱스 i, j에 대해 prices[j] - prices[i]를 최대화해야 합니다. |
7 |
| -- 즉, 한 번의 매수와 한 번의 매도를 통해 얻을 수 있는 최대 이익을 계산합니다. |
8 |
| -- 매수는 매도보다 반드시 먼저 이루어져야 합니다. |
9 |
| -
|
10 |
| -알고리즘 설명: |
11 |
| -1. 배열을 왼쪽에서 오른쪽으로 한 번 순회합니다. |
12 |
| -2. 현재 주식 가격이 `min_price`보다 작으면, `min_price`를 갱신합니다. |
13 |
| - - `min_price`는 현재까지의 최소 매수 가격을 의미합니다. |
14 |
| -3. 현재 주식 가격에서 `min_price`를 뺀 값(현재 이익)이 `max_profit`보다 크면, `max_profit`을 갱신합니다. |
15 |
| - - `max_profit`은 현재까지의 최대 이익을 의미합니다. |
16 |
| -4. 배열 순회가 끝난 후, `max_profit`을 반환합니다. |
17 |
| -
|
18 |
| -시간 복잡도: |
19 |
| -- 배열을 한 번만 순회하므로 O(n)입니다. |
20 |
| -
|
21 |
| -공간 복잡도: |
22 |
| -- 추가적인 배열이나 데이터 구조를 사용하지 않고, 두 개의 변수(`min_price`, `max_profit`)만 사용하므로 O(1)입니다. |
23 |
| -*/ |
24 |
| - |
| 1 | +/** |
| 2 | + * 주어진 주식 가격 배열에서 한 번의 매수와 한 번의 매도를 통해 얻을 수 있는 최대 이익을 계산합니다. |
| 3 | + * 매수는 매도보다 반드시 먼저 이루어져야 합니다. |
| 4 | + * |
| 5 | + * @param {number[]} prices - 각 날짜별 주식 가격을 나타내는 배열 |
| 6 | + * @returns {number} 최대 이익 (이익을 낼 수 없는 경우 0 반환) |
| 7 | + * |
| 8 | + * @example |
| 9 | + * maxProfit([7, 1, 5, 3, 6, 4]); // 5 (2일차에 매수하고 5일차에 매도) |
| 10 | + * maxProfit([7, 6, 4, 3, 1]); // 0 (이익을 낼 수 없음) |
| 11 | + * |
| 12 | + * @description |
| 13 | + * - 시간 복잡도: O(n) |
| 14 | + * 배열을 한 번 순회하며 각 요소에 대해 상수 시간 연산만 수행합니다. |
| 15 | + * - 공간 복잡도: O(1) |
| 16 | + * 추가적인 배열이나 데이터 구조를 사용하지 않고, 두 개의 변수만 사용합니다. |
| 17 | + */ |
25 | 18 | function maxProfit(prices) {
|
26 |
| - let min_price = Infinity; // 초기 최소값을 무한대로 설정 (어떤 값과 비교해도 갱신되도록 설정) |
27 |
| - let max_profit = 0; // 초기 최대 이익은 0 (이익이 없을 경우에도 0을 반환해야 함) |
| 19 | + let min_price = Infinity; // 현재까지의 최소 매수 가격 (초기값은 무한대) |
| 20 | + let max_profit = 0; // 현재까지의 최대 이익 (초기값은 0) |
28 | 21 |
|
29 | 22 | // 배열을 순회하며 최소 매수 가격과 최대 이익을 계산
|
30 | 23 | for (let price of prices) {
|
|
0 commit comments