백준 20546 js

인지용·2024년 11월 4일
0

알고리즘

목록 보기
6/46
post-thumbnail

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

const input = require('fs')
    .readFileSync(process.platform === 'linux' ? '/dev/stdin' : './data.txt')
    .toString()
    .split('\n');


const money = parseInt(input[0]);
const arr = input[1].split(" ").map(Number);
const result = junCalculate(money, arr);
const result2 = seongCalculate(money, arr);

if (result > result2) {
    console.log("BNP");
} else if (result < result2) {
    console.log("TIMING");
} else {
    console.log("SAMESAME");
}

function junCalculate(money, arr) {
    let stockNum = 0;
    let lastStockPrice = arr[arr.length - 1];

    for(let i=0; i<arr.length; i++) {

        //현금이 주가보다 많거나 같으면
        if(money >= arr[i]) {
            stockNum += Math.floor(money / arr[i]); //주식 수 상승
            money = money % arr[i];     //현금 차감
        }
    }

    return money + lastStockPrice * stockNum;
}

function seongCalculate(money, arr) {
    let stockNum = 0;
    let lastStockPrice = arr[arr.length - 1];
    let ascDesc = 0;
    let descCount = 0;

    for(let i=1; i<arr.length; i++) {
        
        //가격이 같다면 계산 x
        if(arr[i-1] == arr[i]) {
            continue;
        }

        //주가 상승
        if(arr[i-1] < arr[i]) {
            ascDesc++;
            descCount=0;
        }

        //주가 하락
        if(arr[i-1] > arr[i]) {
            descCount++;
            ascDesc=0;
        }

        //매도(판매)
        if(ascDesc >= 3) {
            money += stockNum * arr[i];
            stockNum = 0;
        }

        //매수(구매)
        if(descCount >= 3) {
            if(money >= arr[i]){
                stockNum += Math.floor(money / arr[i]);
                money = money % arr[i];
            }
        }
    }

    return money + lastStockPrice * stockNum;
}

준현, 성민의 돈을 각각 계산하기 위해서 두 메소드로 분리했다.

준현이의 경우 주가가 현금보다 낮으면 풀매수를 때리면 되기 때문에 간단한데, 성민이에서 살짝 애를 먹었다.

살짝 고민을 하다보니 상승, 하락에 대한 카운트가 필요했고
const money = parseInt(input[0]);
여기서 첫 제출시에는 parseInt를 사용하지 않아서 문자열로 인식하여 현금이 100이 아니라 1000이 되는 상황이 됐었다.

주가가 3연속 하락하면 매수 후 하락카운트를 바로 초기화 시켜줬는데 그게 아니었다. 현금이 남았고 다음날 또 주가가 하락한다면 사야하기 때문에 초기화 하는 부분을 없애줬다.

아무튼 해결!

profile
한-줄

0개의 댓글