React

12 주식을 사고팔기 가장 좋은 시점

한번의 거래로 낼 수 있는 최대 이익을 산출하라.
설명 1일 때 사서 6일 때 팔면 5의 이익을 얻는다.

My solution

max를 업데이트하는 식으로 브루트 포스로 풀었다.

Code

const BestTimeToBuyAndSell = function (s) { let max = 0; for (let i = 0; i < s.length; i++) { for (let j = i + 1; j < s.length; j++) { if (s[j] - s[i] > max) { max = s[j] - s[i]; } } } return max; };
JavaScript
복사
시간복잡도 O(n2^{2})라서 효율성에서 떨어진다.

Solution

1. 브루트 포스로 계산

내 풀이와 동일하다.

2. 저점과 현재 값과의 차이 계산

시각화해보면 직관으로 풀이가 떠오를 수 있다.
한칸씩 이동하면서 이전 최저점과 현재 값을 빼면서 그 값을 가지고 max를 업데이트한다.
const BestTimeToBuyAndSell = function (s) { let min = Number.MAX_SAFE_INTEGER; let max = 0; for (let i = 0; i < s.length; i++) { min = Math.min(min, s[i]); max = Math.max(max, s[i] - min); } return max; };
JavaScript
복사