티스토리 뷰

알고리즘

1. 전체 수에 대한 경우의 수의 배열을 생성한다.

2. 해당 알고리즘에서 랜덤 숫자와 같은 스트라이크, 볼 수를 가진 경우의 수를 제거

3. 스트라이크가 3일 때 혹은 전체 경우의 수의 배열이 1개가 남을 때 종료

import random
import string

allCount=0
count=0
## 몇 번 돌릴지 결정
while allCount<1000:
    allCount+=1
    arrNum2=[str(i).zfill(3) for i in range(12,988)]
    arrNum=[str(i).zfill(3) for i in range(12,988)]

    ## 경우의 수 중복 제거
    for i in range(len(arrNum2)):
       if len(arrNum2[i])>len(set(arrNum2[i])):
           arrNum.remove(arrNum2[i])

    ranNum = random.choice(arrNum) ## 정답 숫자

    ## 숫자 맞추기 시작
    while True:
        count+=1
        comp = random.choice(arrNum) ## 컴퓨터가 맞추는 숫자

        ## STRIKE, BALL 초기화
        strike = 0
        ball = 0

        ## STRKIE & BALL 횟수 확인
        for i in range(3):
            if comp[i]==ranNum[i]:
                strike+=1
            elif comp[i] in ranNum:
                ball+=1

        ## 3 STRKIE이거나 전체 남아있는 넘버가 1개면 종료
        if strike == 3 or len(arrNum) == 1:
            break

        ## 경우의 수 제거
        for i in range(len(arrNum)-1, -1, -1):

            ## 자기자신 제거
            if comp[0] == arrNum[i][0] and comp[1] == arrNum[i][1] and comp[2] == arrNum[i][2]:
                del arrNum[i]

            ## STRKIE 수랑 BALL 수랑 같은거 제거
            else:
                
                ## 전체 수가 들어있는 배열에 대한 스트라이크 & 볼 횟수
                arr_strike=0
                arr_ball=0
                
                ## 배열 안 스트라이크 & 볼 횟수 확인
                for j in range(3):
                    if comp[j]==arrNum[i][j]:
                        arr_strike+=1
                    elif comp[j] in arrNum[i]:
                        arr_ball+=1

                ## 같으면 계속 진행 / 다르면 삭제
                if strike==arr_strike and ball==arr_ball:
                    continue
                else:
                    del arrNum[i]

## 평균 count 횟수 출력
print(count/allCount)

--> 1000번을 실행하여 평균 진행횟수를 계산해보았다.

보통 5.xx번 나온다.

 

'프로그래밍 > 알고리즘' 카테고리의 다른 글

문자열 순열 알고리즘 JAVA  (0) 2020.11.16
C 가위바위보 게임  (0) 2019.08.20
C 다이아몬드 ver.2  (0) 2019.07.24
C# 로또번호  (2) 2019.06.20
C# 다이아몬드  (5) 2019.06.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday