https://www.acmicpc.net/problem/20546
1. Scanner를 사용한 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int joon_money=sc.nextInt();
int joon_cnt=0;
int min_money=joon_money;
int min_cnt=0;
int[] array=new int[14];
for(int i=0; i<14; i++) {
array[i]=sc.nextInt();
}
for(int i=0; i<array.length; i++) {
// 준현
int day_money=array[i];
joon_cnt+=joon_money/day_money; // 주식 가능한 전량매수
joon_money%=day_money; // 주식 수 계산
// 성민
if (low(array,i)) { // 전량 매수
min_cnt+=min_money/day_money;
min_money%=day_money;
}
if(high(array,i)) { // 전량 매도
min_money+=day_money*min_cnt;
min_cnt=0;
}
}
// 14일 마지막 날
joon_money+=joon_cnt*array[13];
min_money+=min_cnt*array[13];
if (joon_money>min_money) {
System.out.println("BNP");
}else if(joon_money < min_money) {
System.out.println("TIMING");
}else {
System.out.println("SAMESAME");
}
}
private static boolean low(int[] array, int cnt) {
if(cnt<3) {
return false;
}
return array[cnt-3]>array[cnt-2] && array[cnt-2]>array[cnt-1] && array[cnt-1]>array[cnt];
}
private static boolean high(int[] array,int cnt) {
if(cnt<3) {
return false;
}
return array[cnt-3]<array[cnt-2] && array[cnt-2]<array[cnt-1] && array[cnt-1]<array[cnt];
}
}
/*
* 준현 - 주식 팔지 않는다. 최대한 많이 산다.
* 성민 - 33 매매법 (전량 매수, 전량 매도, 빚 내지 x)
* 3일 연속 가격 상승 (3일째 전량 매도)
* 3일 연속 가겨 하락 (마지막 날 전량 매수)
* */
2. Buffer 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int money = Integer.parseInt(bufferedReader.readLine());
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int[] array = new int[14];
int index = 0;
while(stringTokenizer.hasMoreTokens()){
array[index++] = Integer.parseInt(stringTokenizer.nextToken());
}
int joon_money=money;
int joon_cnt=0;
int min_money=money;
int min_cnt=0;
for(int i=0; i<array.length; i++) {
// 준현
int day_money=array[i];
joon_cnt+=joon_money/day_money; // 주식 가능한 전량매수
joon_money%=day_money; // 주식 수 계산
// 성민
if (low(array,i)) { // 전량 매수
min_cnt+=min_money/day_money;
min_money%=day_money;
}
if(high(array,i)) { // 전량 매도
min_money+=day_money*min_cnt;
min_cnt=0;
}
}
// 14일 마지막 날
joon_money+=joon_cnt*array[13];
min_money+=min_cnt*array[13];
if (joon_money>min_money) {
System.out.println("BNP");
}else if(joon_money < min_money) {
System.out.println("TIMING");
}else {
System.out.println("SAMESAME");
}
}
private static boolean low(int[] array, int cnt) {
if(cnt<3) {
return false;
}
return array[cnt-3]>array[cnt-2] && array[cnt-2]>array[cnt-1] && array[cnt-1]>array[cnt];
}
private static boolean high(int[] array,int cnt) {
if(cnt<3) {
return false;
}
return array[cnt-3]<array[cnt-2] && array[cnt-2]<array[cnt-1] && array[cnt-1]<array[cnt];
}
}
/*
* 준현 - 주식 팔지 않는다. 최대한 많이 산다.
* 성민 - 33 매매법 (전량 매수, 전량 매도, 빚 내지 x)
* 3일 연속 가격 상승 (3일째 전량 매도)
* 3일 연속 가겨 하락 (마지막 날 전량 매수)
* */
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[SWEA] 1208. Flatten (0) | 2022.08.02 |
---|---|
[4396] 지뢰찾기 in Java (0) | 2022.08.01 |
[SWEA] 1961. 숫자 배열 회전 in Java (0) | 2022.07.11 |
[SWEA] 2001. 파리 퇴치 in python (0) | 2022.07.11 |
[SWEA] 1979. 어디에 단어가 들어갈 수 있을까 in Java (0) | 2022.07.11 |