prices는 배열이며, 각 요소는 매일의 주식 가격이다.
만약 한 번만 거래할 수 있다면 = 사고 팔 수 있다면,
제일 큰 이익은 얼마인지를 구하는 함수
const maxProfit = prices => {
let max = 0;
for(let i = 0; i < prices.length;i++) {
for(let j = i+1; j < prices.length;j++) {
if(max < prices[j]-prices[i]){
max = prices[j]-prices[i]
}
}
}
return max;
};
for문을 두 번 사용했고 배열의 각 인덱스는 각 날짜이므로 오늘사서 어제파는 것은 불가능 하기 때문에 let j = i+1
을 해 이미 지나온 날짜는 비교하지 않도록 했다.
이후로는 수익을 비교해서 max 값을 찾아서 return 하였다.
const maxProfit = prices => {
var min = Number.MAX_SAFE_INTEGER;
var max = 0;
for (var i = 0; i < prices.length; i++) {
min = Math.min(min, prices[i]);
max = Math.max(max, prices[i] - min);
}
return max;
};
Math.min
, Math.max
를 이용한 풀이는 생각을 못 했기 때문에 좋은 학습이 되었다.
Number.MAX_SAFE_INTEGER
에 대해서도 알게되었다.
Number.MAX_SAFE_INTEGER
는 'JavaScript에서 안전한 최대 정수값을 가진다.'고 되어 있다.
최근에 읽었던 코어자바스크립트에서 JS는 메모리 관리에 대한 압박에서 자유로워져 숫자의 경우 정수형인지 부동소수형인지를 구분하지 않고 8바이트(64비스)를 확보한다고 했다.
그래서 JS는 -(253 - 1)과 253 - 1 사이의 수만 안전하게 표현 할 수 있다!
(-9007199254740991과 9007199254740991 사이의 수)
그렇게 때문에 위의 코드에서 min은 price[i]과 비교되어야 하는 수이고 당연하지만! price[i]값이 더 작게 나와야지 올바른 계산이 된다.
이 말은 min에
Number.MAX_SAFE_INTEGER
를 할당한 것은 JS에서 다룰 수 있는 최대의 정수값을 할당한 것이기 때문에 어떤 수가 들어와도 min과 비교 했을 때 더 작은 수가 되고 올바르게 함수가 작동 할 수 있다는 것이다.
여기까지가 내가 이해한 부분이다.
워낙에 얕은 지식을 가지고 있는지라 정확한지는 모르겠지만 나는 내가 알고 있는 것들을 연관시켜서 이해하는 공부를 할 때 가장 즐겁다.
이런 순간이 조만간 또 오기를 바라며 오늘의 포스팅을 마친다.