[Javascript] (백준 20546) 기적의 매매법

Chaedie·2022년 6월 24일
0

Javascript - PS

목록 보기
24/24
post-custom-banner

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

//* 인풋 - 디폴트
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filePath).toString().split('\n');

//* 인풋 - 커스텀, 함수 콜
const n = +input[0];
const prices = input[1].split(' ').map((num) => +num);

const answer = solution(n, prices);
console.log(answer.trim());

//* 로직함수
function solution(n, prices) {
  const bnp = {
    money: n,
    stock: 0,
  };
  const timing = {
    money: n,
    stock: 0,
  };

  for (let i = 0; i < prices.length; i++) {
    if (bnp.money / prices[i] >= 0) {
      bnp.stock += Math.floor(bnp.money / prices[i]);
      bnp.money -= Math.floor(bnp.money / prices[i]) * prices[i];
    }
  }

  for (let i = 3; i < prices.length; i++) {
    let zero = prices[i - 3];
    let first = prices[i - 2];
    let second = prices[i - 1];
    let third = prices[i];
    if (zero > first && first > second && second > third) {
      timing.stock += Math.floor(timing.money / prices[i]);
      timing.money -= Math.floor(timing.money / prices[i]) * prices[i];
    }
    if (zero < first && first < second && second < third) {
      timing.money += timing.stock * prices[i];
      timing.stock = 0;
    }
  }

  return result(bnp, timing);
}

function result(bnp, timing) {
  bnp.money = bnp.money + bnp.stock * prices[prices.length - 1];
  timing.money = timing.money + timing.stock * prices[prices.length - 1];

  if (bnp.money > timing.money) {
    return 'BNP';
  } else if (bnp.money < timing.money) {
    return 'TIMING';
  } else {
    return 'SAMESAME';
  }
}

배운 점, 느낀 점

구현 문제를 푸는 데 DTO object를 사용해야 할 때가 왔다. 변수명을 bnpMoney, bnpStock 이런식으로 할랬는데 정신없고, 별로더라. 확실히 객체로 묶어주니까 코드가 명료해진다.

근데 어떤 영상을 보니까 JS 오브젝트 쓰지말고 클래스 쓰라는데 이거 왜그런지? 무슨 의미인지? 한번 찾아봐야겠다.

profile
TIL Blog - Today's Intensive Learning!
post-custom-banner

0개의 댓글