static String[] stock; // 주가
static int jc, sc; // 준현, 성민의 보유 현금
static int numJ, numS; // 준현, 성민의 보유 주식 수
먼저 날짜별로 주가를 저장한 배열, 두 사람이 각각 보유한 현금과 주식 수를 저장할 변수를 생성한다.
BufferedReader br = new BufferedReader(new InputStreamReader(in));
int cash = Integer.parseInt(br.readLine()); // 주어지는 현금
stock = br.readLine().split(" "); // 주어지는 주가는 공백을 두고 주어진다.
// 현금 입금
jc = cash;
sc = cash;
// 거래는 14일간 진행
for (int i = 0; i < 14; i++) {
int money = Integer.parseInt(stock[i]); // 현재 주가
// 준현의 매매
if (jc != 0 && jc / money > 0) {
numJ += jc / money;
jc = jc % money;
out.println(jc);
}
if (i > 2) {
sTrading(money, i);
}
}
// 금액 결산
jc += numJ * Integer.parseInt(stock[13]);
sc += numS * Integer.parseInt(stock[13]);
if (jc > sc) {
out.println("BNP");
} else if (jc == sc) {
out.println("SAMESAME");
} else {
out.println("TIMING");
}
}
첫 번째줄에 주어진 현금을 위에서 선언한 현금 변수에 저장한다.
거래는 14일간 진행이되므로 주가를 저장하는 배열에 반복문을 통해 주가를 저장한다.
준현의 매매는 현금이 0원이 아님과 동시에 현금을 주가로 나눴을떄 0보다 크다면 매매가 이뤄진다.
public static void sTrading(int money, int cnt) {
// 성현의 매매법은 3일 연속 가격이 전날대비 상승하면 전량 매도 하락하면 전량 매수
int num3 = Integer.parseInt(stock[cnt - 3]); // 3일전
int num2 = Integer.parseInt(stock[cnt - 2]); // 2일전
int num1 = Integer.parseInt(stock[cnt - 1]); // 1일전
if (numS != 0 && num1 < money && num2 < num1 && num3 < num2) {
// 3일 연속 상승했다면 판매!
sc += money * numS;
numS = 0; // 전량 매도
} else if (sc != 0 && sc / money > 0 && num1 > money && num2 > num1 && num3 > num2) {
// 3일 연속 하락했다면 모두 구매!
numS += sc / money;
sc = sc % money;
}
성민의 매매법은 전날의 주가에 대한 비교군이 필요하기에 'i > 2' 라는 조건이 붙었다.
파라미터로 주가와 인덱스 값을 받아 3일간의 주가를 구해 각각 num1,2,3에 할당후 각각 하락시 또는 상승시의 매매 전략을 조건으로 하여 계산식을 만들었다.