위코드 코드카타를 정리한 내용입니다.
배열안의 각 요소들은 주식 가격입니다. 한번의 거래만 할 수 있을 때 가장 큰 이익을 구합니다.
// input
[7, 1, 5, 3, 6, 4]
// output
5
// 1일 때 샀다 6일 때 파는 것이 가장 큰 이득입니다.
배열의 순서를 나누고 이중 for 문을 돌려 각 값들을 빼줍니다. 두번째 for 문의 인덱스는 i + 1 로 시작하고 기존 배열에서 i 를 뺀 만큼만 순회합니다. 이렇게 구한 차이 값이 0보다 크면 배열에 담고 작으면 0으로 반환한 후 해당 배열에서 가장 큰 값을 구하면 됩니다.
const maxProfit = arr => {
let reArr = arr.reverse(); // 배열 순서 뒤집기
let result = []; // 차이값 담을 빈 배열 생성
for (let i = 0; i < reArr.length; i++) { // 첫번째 포문
for (let j = i + 1; j < reArr.length - i; j++) { // 두번째 포문
let gap = reArr[i] - reArr[j]; // i 와 i+1 의 값 차익 계산
if (gap > 0) { // 차익이 0보다 크면
result.push(gap) // 배열에 담고
}
result.push(0) // 작으면 0을 담고
}
}
return Math.max(...result) // 해당 배열의 가장 큰 값을 반환
}
아래처럼 중간중간 콘솔을 찍어보면 중간 과정을 조금 더 명확히 확인할 수 있습니다.
const maxProfit = arr => {
let reArr = arr.reverse();
console.log(reArr);
let result = [];
for (let i = 0; i < reArr.length; i++) {
console.log("-------------------------", i)
console.log("reArr[i] : ", reArr[i]);
for (let j = i + 1; j < reArr.length - i; j++) {
console.log("------")
console.log("reArr[j]", reArr[j])
let gap = reArr[i] - reArr[j];
console.log("gap : ", gap)
if (gap > 0) {
result.push(gap)
}
result.push(0)
}
}
return Math.max(...result)
}