1. 문제
https://www.acmicpc.net/problem/20546
2. 풀이과정
14일간 주식 매매를 진행하고 준현이와 성민이의 과정을 나누어 생각한다.
준현이
- 매일 돈만 되면 가능한한 모든 주식을 구매한다. = 매일 전량 매수
성민이
-오늘 이전으로 3일 간 주가가 연속적으로 올랐다면 전량 매도
- 오늘 이전으로 3일 간 주가가 연속적으로 내려갔다면 전량 매수
두 친구의 공통 특징은 조건이 맞다면 둘다 전량 매수를 진행한다.
따라서 현재 돈, 오늘의 주가, 현재 가지고 있는 주식 수를 매개변수로 받아 전량 매수, 매도를 처리해주는 함수를 만듦
반복문으로 주가배열을 순회하며 매일의 주가를 매개변수로 넣어주어 각자의 매매를 진행시킨다.
3. 자바스크립트 코드
const fs = require('fs')
const filepath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filepath).toString().split('\n');
const seedMoney = +input[0];
const arr = input[1].split(' ').map(Number);
let jMoney = seedMoney;
let sMoney = seedMoney;
let jStock = 0;
let sStock = 0;
function buyStock(money, price, stock)
{
while(money >= price){
stock++;
money -= price;
}
return [money, stock]
}
function sellStock(money, price, stock)
{
while(stock > 0){
stock--;
money += price;
}
return [money, stock]
}
for(let i = 0; i < 14; i++){
[jMoney, jStock] = buyStock(jMoney, arr[i], jStock); //준현이
if(i > 2) //성민이
{
if(arr[i - 3] < arr[i - 2] && arr[i - 2] < arr[i - 1]) //3일 연속 증가
[sMoney, sStock] = sellStock(sMoney, arr[i], sStock);
if(arr[i - 3] > arr[i - 2] && arr[i - 2] > arr[i - 1]) //3일 연속 하락
[sMoney, sStock] = buyStock(sMoney, arr[i], sStock);
}
}
const jResult = jMoney + jStock * arr[13];
const sResult = sMoney + sStock * arr[13];
if (jResult > sResult)
console.log("BNP");
else if (jResult < sResult)
console.log("TIMING");
else
console.log("SAMESAME");
'🏆 PS(Problem Solving) > Baekjoon' 카테고리의 다른 글
[C++] 백준 2578 빙고 (0) | 2024.05.30 |
---|---|
[C++] 백준 20546 기적의 매매법 (1) | 2024.05.29 |
[C++] 백준 14467 소가 길을 건너간 이유1 (0) | 2024.05.28 |
[Node.js] 백준 Javascript 14467 소가 길을 건너간 이유 1 (0) | 2024.05.28 |
[C++] 백준 1715 카드 정렬하기 (0) | 2024.05.15 |