🔒Algorithm

백준[JS] > 11501번 주식

devWarrior 2024. 11. 4. 20:53

 

링크

https://www.acmicpc.net/problem/11501

 

문제풀이

1. 메모리 초과로 실패한 코드

-> 굳이 새로운 배열(refArr) 을 만들고 2번의 순회를 할 필요가 없었다.

const fs = require("fs");
const input = fs
    .readFileSync("/dev/stdin")
    .toString()
    .split("\n")
    .map((str) => {
        return str.split(" ").map((n) => Number(n));
    });
    
for (let i = 1; i < input.length; ++i) {
    if (input[i].length > 1) {
        let benefit = 0;
        let prices = input[i];
        let max = 0;
        let refArr = [];
        for (let j = prices.length - 1; j >= 0; --j) {
            max = Math.max(max, prices[j]);
            refArr.push(max);
        }

        for (let z = 0; z <= prices.length - 1; ++z) {
            let price = prices[z];

            if (price < refArr[prices.length - 1 - z]) {
                benefit = benefit + refArr[prices.length - 1 - z] - price;
            }
        }

        console.log(benefit);
    }
}

 

 

2.성공한 코드 

const fs = require("fs");
const input = fs
    .readFileSync("/dev/stdin")
    .toString()
    .split("\n")
    .map((str) => {
        return str.split(" ").map((n) => Number(n));
    });

for (let i = 1; i < input.length; ++i) {
    if (input[i].length > 1) {
        let benefit = 0;
        let prices = input[i];
        let max = 0;
        for (let j = prices.length - 1; j >= 0; --j) {
            max = Math.max(max, prices[j]);
            if (max > prices[j]) {
                benefit = benefit + max - prices[j];
            }
        }
        console.log(benefit);
    }
}