비트교육_단기과정
야구게임 1000번 평균횟수 5회
- -
package week_4; import java.util.ArrayList; import java.util.Iterator; import java.util.Random; public class BaseBallExam { public static void main(String[] args) { int total = 0; for (int exeCount = 0; exeCount < 1000; exeCount++) { Random rand = new Random(); ArrayList<Num> list = new ArrayList<>(); Num goalNum = BaseBallExam.goalNumCreate(rand);// 목표 숫자 BaseBallExam.numberOfAll(list);// 질문할 모든 경우의 수를 생성하여 list에 담음 System.out.println("============================================="); System.out.println("목표숫자 : " + goalNum.strVer()); System.out.println("============================================="); System.out.println(); Iterator<Num> iterator; int cntQuesiton = 0; // 질의 횟수 int strikeCnt; int ballCnt; while (true) { int[] strikeIndex = new int[3]; strikeCnt = 0; ballCnt = 0; int tempIndex = rand.nextInt(list.size()); int[] goal = goalNum.getNum(); int[] temp = list.get(tempIndex).getNum(); for (int i = 0; i < temp.length; i++) { if (goal[i] == temp[i]) { strikeIndex[i]++; strikeCnt++; } } for (int n = 0; n < goal.length; n++) { for (int j = 0; j < temp.length; j++) { if (temp[j] == goal[n]) { ballCnt++; } } } ballCnt -= strikeCnt; System.out.print("CPU => "); list.get(tempIndex).disp(); System.out.println("strike : " + strikeCnt + " ball : " + ballCnt); int first = list.get(tempIndex).getNumFirst(); int secont = list.get(tempIndex).getNumSecond(); int third = list.get(tempIndex).getNumThrid(); list.remove(tempIndex); if (ballCnt >= 1 && strikeCnt == 0) { iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (first == temp03.getNumFirst()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (secont == temp03.getNumSecond()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (third == temp03.getNumThrid()) { iterator.remove(); } } } if (ballCnt == 0 && strikeCnt == 0) { iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (first == temp03.getNumFirst()) { iterator.remove(); } if (first == temp03.getNumSecond()) { iterator.remove(); } if (first == temp03.getNumThrid()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (secont == temp03.getNumFirst()) { iterator.remove(); } if (secont == temp03.getNumSecond()) { iterator.remove(); } if (secont == temp03.getNumThrid()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (third == temp03.getNumFirst()) { iterator.remove(); } if (third == temp03.getNumSecond()) { iterator.remove(); } if (third == temp03.getNumThrid()) { iterator.remove(); } } } if (strikeCnt > 0) { if (strikeIndex[0] == 1) { iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (!(first == temp03.getNumFirst())) { iterator.remove(); } } } if (strikeIndex[1] == 1) { iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (!(secont == temp03.getNumSecond())) { iterator.remove(); } } } if (strikeIndex[2] == 1) { iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (!(third == temp03.getNumThrid())) { iterator.remove(); } } } } if (strikeCnt == 1 && ballCnt == 0) { if (strikeIndex[0] == 1) {// 100의자리가 strike일 경우 iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (!(first == temp03.getNumFirst())) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (secont == temp03.getNumSecond()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (third == temp03.getNumThrid()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (secont == temp03.getNumThrid()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (third == temp03.getNumSecond()) { iterator.remove(); } } } if (strikeIndex[1] == 1) {// 10의자리가 strike일 경우 iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (!(secont == temp03.getNumSecond())) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (first == temp03.getNumFirst()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (third == temp03.getNumThrid()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (first == temp03.getNumThrid()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (third == temp03.getNumFirst()) { iterator.remove(); } } } if (strikeIndex[2] == 1) {// 1의자리가 strike일 경우 iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (!(third == temp03.getNumThrid())) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (first == temp03.getNumFirst()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (secont == temp03.getNumSecond()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (first == temp03.getNumSecond()) { iterator.remove(); } } iterator = list.iterator(); while (iterator.hasNext()) { Num temp03 = iterator.next(); if (secont == temp03.getNumFirst()) { iterator.remove(); } } } } if (strikeCnt == 3) break; System.out.println("경우의 수 : " + list.size()); System.out.println(); cntQuesiton++; } System.out.println(); System.out.println("최종횟수 : " + cntQuesiton); total += cntQuesiton; } System.out.println(); System.out.println("1000번 시행 했을떄 평균 횟수 : " + (total / 1000)); } public static Num goalNumCreate(Random rand) {// 목표 숫자 난수로 발생 int firstPosition = rand.nextInt(10); int secontPosition = 0; int thirdPosition = 0; while (true) { secontPosition = rand.nextInt(10); if (!(firstPosition == secontPosition)) { thirdPosition = rand.nextInt(10); if (!(secontPosition == thirdPosition || firstPosition == thirdPosition)) { break; } } } Num goalNum = new Num(firstPosition, secontPosition, thirdPosition); return goalNum; } public static void numberOfAll(ArrayList<Num> list) { for (int i = 0; i < 10; i++) {// 질의할 모든 경우의 수를 list에 담음 for (int j = 0; j < 10; j++) { if (!(i == j)) { for (int n = 0; n < 10; n++) { if (!(j == n || i == n)) { list.add(new Num(i, j, n)); } } } } } } } | cs |
'비트교육_단기과정' 카테고리의 다른 글
이진검색 재귀함수 : 마기창 (0) | 2022.07.13 |
---|---|
팩토리얼을 재귀함수로 구현 (0) | 2022.07.13 |
알고리즘 3번 : 마기창 (0) | 2022.07.12 |
알고리즘 2번 문제 (0) | 2022.07.11 |
알고리즘 1번 문제 (0) | 2022.07.11 |
Contents
소중한 공감 감사합니다