반응형
package Algorithm;//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class Baseball {
ArrayList<Integer> nCase = new ArrayList();
ArrayList<Integer> answer = new ArrayList();
ArrayList<Integer> list = new ArrayList();
ArrayList<Integer> log = new ArrayList();
Random random = new Random();
int rAnswer;
int myAnswer;
int count = 1;
double avg;
Baseball() {
String str = "";
for(int i = 0; i < 3; ++i) {
int temp = this.random.nextInt(10);
if (this.answer.contains(temp)) {
--i;
} else {
this.answer.add(temp);
str = str + temp;
}
}
this.rAnswer = Integer.parseInt(str);
System.out.println("Answer is..." + this.answer);
for(int i = 0; i < 10; ++i) {
for(int j = 0; j < 10; ++j) { // 모든 경우의 수를 만들어 저장한다.
for(int k = 0; k < 10; ++k) {
if (i != j && j != k && i != k) {
String tmp = "";
tmp = tmp + Integer.toString(i);
tmp = tmp + Integer.toString(j);
tmp = tmp + Integer.toString(k);
if(Integer.parseInt(tmp) <= 101)
continue;
this.nCase.add(Integer.parseInt(tmp));
}
}
}
}
}
public static void main(String[] args) {
int cnt = 0;
for(int i = 0; i <1000; i++) {
Baseball bs = new Baseball();
bsQuestion(bs);
cnt += bs.count;
}
System.out.println(cnt);
}
static void bsQuestion(Baseball bs) {
bs.list.add(1);
bs.list.add(2);
bs.list.add(3);
bs.log.add(123);
System.out.println("최대경우의수 : " + bs.nCase.size());
find(bs);
}
static void find(Baseball bs) {
int st = 0;
int ball = 0;
for(int i = 0; i < 3; ++i) {
if (bs.list.get(i) == bs.answer.get(i)) {
++st;
} else if (bs.answer.contains(bs.list.get(i))) {
++ball;
}
}
System.out.println(st + " Strike " + ball + " ball");
delete(bs, st, ball);
}
static int delete(Baseball bs, int st, int ball) {
Random random = new Random();
String str1 = Integer.toString(bs.list.get(0));
String str2 = Integer.toString(bs.list.get(1));
String str3 = Integer.toString(bs.list.get(2));
System.out.println("지금 내가할 답 : " + bs.list + "답이 있나요? : " + bs.nCase.contains(bs.rAnswer));
int k;
String str;
if (st == 0 && ball == 1) { //볼이 하나 있을때 경우의 수 중 내가 한 답 숫자중 하나도 없는 경우를 지움
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
if (str.contains(str1)) {
} else if (str.contains(str2)) {
} else if (str.contains(str3)) {
} else {
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}
System.out.println("볼이 1개 있을때 경우의 수 : " + bs.nCase.size());
} else if (st == 1 && ball == 0) { //스트라이크가 하나 있을때 경우의 수 중 내가 한 답 숫자의 자리와 하나도 안맞는 경우를 지움
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
String[] strArr = str.split("");
if ((strArr[0].equals(str1))){}
else if ((strArr[1].equals(str2))) {}
else if ((strArr[2].equals(str3))) {}
else{
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}
System.out.println("스트라이크가 1개 있을 때 경우의 수 : " + bs.nCase.size());
} else if (st == 0 && ball == 2) { //볼이 두개 있을때 경우의 수 중 내가 한 답 숫자의 2개가 하나도 없는 경우를 지움
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
if (str.contains(str1) && str.contains(str2)) {}
else if((str.contains(str2) && str.contains(str3))){}
else if ((str.contains(str1) && str.contains(str3))) {}
else{
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}
System.out.println("볼이 2개 있을 때 경우의 수 : " + bs.nCase.size());
} else if(st == 2 && ball == 0){
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
String[] strArr = str.split("");
if (!(strArr[0].equals(str1) && strArr[1].equals(str2)) && !(strArr[1].equals(str2) && strArr[2].equals(str3)) &&
!(strArr[0].equals(str1) && strArr[2].equals(str3))) {
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}
System.out.println("스트라이크가 2개 있을 때 경우의 수 : " + bs.nCase.size());
}else if (ball == 3){
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
if(!str.contains(str1) && !str.contains(str2) && !str.contains(str3)){
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}
}else if(st == 1 && ball == 1){
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
String[] strArr = str.split("");
if (!(strArr[0].equals(str1) && str.contains(str2)) && !(strArr[0].equals(str1) && str.contains(str3))
&& !(strArr[1].equals(str2) && str.contains(str1)) && !(strArr[1].equals(str2) && str.contains(str3))
&& !(strArr[2].equals(str3) && str.contains(str1)) && !(strArr[2].equals(str3) && str.contains(str2))){
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}
System.out.println("스트라이크가 1개 볼이 1개있을 때 경우의 수 : " + bs.nCase.size());
}else if(st == 1 && ball == 2){
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
String[] strArr = str.split("");
if (!(strArr[0].equals(str1) && str.contains(str2) && str.contains(str3)) && !(strArr[0].equals(str1) && str.contains(str2)&& str.contains(str3))
&& !(strArr[1].equals(str2) && str.contains(str1) && str.contains(str3)) && !(strArr[1].equals(str2) && str.contains(str1) && str.contains(str3))
&& !(strArr[2].equals(str3) && str.contains(str1) && str.contains(str2)) && !(strArr[2].equals(str3) && str.contains(str1)&& str.contains(str2))){
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}
System.out.println("스트라이크가 1개 볼이 2개있을 때 경우의 수 : " + bs.nCase.size());
}else if(st == 2 && ball ==1){
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
String[] strArr = str.split("");
if (!(strArr[0].equals(str1) && strArr[1].equals(str2) && str.contains(str3)) && !(strArr[0].equals(str1) && strArr[2].equals(str3) && str.contains(str2))
&& !(strArr[1].equals(str2) && strArr[2].equals(str3) && str.contains(str1))){
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}
System.out.println("스트라이크가 2개 볼이 1개있을 때 경우의 수 : " + bs.nCase.size());
} else if (st == 0 && ball == 0) {
for(k = 0; k < bs.nCase.size(); ++k) {
str = Integer.toString(bs.nCase.get(k));
if (str.contains(str1)) {
bs.nCase.remove(bs.nCase.get(k));
--k;
}
else if (str.contains(str2)) {
bs.nCase.remove(bs.nCase.get(k));
--k;
}
else if (str.contains(str3)) {
bs.nCase.remove(bs.nCase.get(k));
--k;
}
}System.out.println("out 일 때 경우의 수 : " + bs.nCase.size());
}
bs.myAnswer = bs.nCase.get(random.nextInt(bs.nCase.size()));
System.out.println("다음에 내가 할 답 : " + bs.myAnswer);
if (bs.rAnswer != bs.myAnswer && st != 3) {
bs.list.clear();
str = Integer.toString(bs.myAnswer);
String[] strArr = str.split("");
bs.list.add(Integer.parseInt(strArr[0]));
bs.list.add(Integer.parseInt(strArr[1]));
bs.list.add(Integer.parseInt(strArr[2]));
bs.nCase.remove(bs.nCase.indexOf(Integer.parseInt(str)));
System.out.println("현재 경우의 수 : " + bs.nCase.size() + "\n" + bs.count++ + "회째...");
find(bs);
} else {
System.out.println("총 카운트 : " + bs.count);
bs.avg += bs.count;
}
return -1;
}
}
반응형
'java' 카테고리의 다른 글
[JSP] 장바구니 기능 session을 사용하여 구현하기 (0) | 2022.09.20 |
---|---|
[JAVA] 배열의 생성과 자료형 (0) | 2022.07.09 |
[JAVA] 제어문 (1) | 2022.07.09 |
[JAVA] 연산자의 종류 (0) | 2022.07.09 |
[JAVA] 기본 자료형간의 타입변환, 연산 (0) | 2022.07.09 |