새소식

인기 검색어

비트교육_단기과정

야구게임 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

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.