네... 시험공부 하다가 너무 하기싫어서 프로그램 한번 짜봤습니다.
"이론적" 기대값은 지금껏 몇분이 올리셨으니 다 아실테고..
제가 보여드릴 건 simulation 입니다.
Matlab 이란 프로그램으로 짜여졌고.. 코드는 아래에 붙여놨습니다.
crank 에는 current rank, 즉 현재랭크 (25~21등급은 그냥 올리시는 게.. 귀찮아서 안 넣었거든요)
desire 는 원하는 랭크
rate 는 승률을 적으면 되네요
자 해봅시다.
내가 지금 20등급이고 15등급까지 가고싶다! 근데 내 승률은 40%밖에 안되네;; 얼마나 해야할까? 가 궁금하시다면
howmanygames(20, 15, 0.4) ㄱㄱ
>> howmanygames(20, 15, 0.4)
ans =
130
>> howmanygames(20, 15, 0.4)
ans =
357
>> howmanygames(20, 15, 0.4)
ans =
275
귀찮아서 3번만 돌려봤네요.
폭이 크죠? 네 큽니다. 시뮬레이션이라서 그래요. 어쩔수있나요? 뭐 .. 그렇다고요
이제 60%로 5등급까지 가볼까요?
>> howmanygames(20, 5, 0.6)
ans =
118
>> howmanygames(20, 5, 0.6)
ans =
151
>> howmanygames(20, 5, 0.6)
ans =
192
이렇다네요..
>> howmanygames(20, 0, 0.6)
ans =
379
>> howmanygames(20, 0, 0.6)
ans =
311
>> howmanygames(20, 0, 0.6)
ans =
248
전설까진 이정도고요. 아 참고로 0등급 = 전설로 설정했습니다.
뭐.. 열심히 겜 해봅시다
아래는 프로그래밍 코드:
function num = howmanygames(crank,desire,rate)
startsreq = [3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 6 6 6];
cstarreq = startsreq(1);
cstar = 0;
rank = crank;
sucwin = 0;
num = 0;
while( rank > 0)
win = rand();
if( win < rate)
cstar = cstar + 1;
if cstar > cstarreq
rank = rank - 1;
if rank==0
break
end
cstarreq = startsreq(21-rank);
cstar = 1;
end
sucwin = sucwin + 1;
if (sucwin>2 && rank>5)
cstar = cstar+1;
end
if cstar > cstarreq
rank = rank - 1;
cstarreq = startsreq(21-rank);
cstar = 1;
end
else
if(cstar==0 && rank==20)
cstar=cstar+1;
end
sucwin = 0;
cstar = cstar-1;
if cstar<0
rank = rank +1;
cstarreq = startsreq(21-rank);
cstar = startsreq(21-rank)-1;
end
end
num = num + 1;
rank;
if rank==desire
rank=rank+1;
break
end
end