선요약

1. 1~100 * 1~100 을 했을때
2. 5000~6000이 나올 확률이 9000~10000이 나올 확률보다 높다
3. 스공 * 크뎀도 마찬가지다

* 크뎀은 딜 계산시 (20+크뎀)% ~ (50%+크뎀)% 범위를 가집니다.

간단한 예시

주사위 두개를 굴려 나온 눈의 곱이 30 이상이 될 확률을 계산해봅시다.

후보가 1~36이고 당첨이 30~36이니 7/36이 정답일까요?



3/36이 정답입니다.

이처럼 두 랜덤의 곱셈은 평균에 가까운 값이 더 많이 등장합니다.

dpm 제작시 맥뎀을 고려한 평균 한줄뎀을 정확하게 계산하기 위해서는 이 문제를 풀 수 있어야 합니다.

ㄴㄷㅆ 설명

여기부터는 읽지 않아도 일상생활에 아무런 영향이 없습니다.

문제를 주사위가 아닌 실수 범위로 확장하면 다음과 같이 표현됩니다.


너무 대충 그렸나 싶지만...

x - 기본딜, y - 크뎀, M - 맥뎀 이라고 생각하시면 됩니다.

(기본딜 = 스공*퍼뎀*최종뎀*기타등등... = 크리티컬이 아닐 시 데미지 구간)

붉은 면적으로 표시된 부분이 맥뎀에 막히는 영역이라고 할 수 있습니다.

기본딜 범위를 [x1, x2], 크뎀 범위를 [y1, y2]라고 하고, 직사각형 영역 S = [x1, x2] * [y1, y2]으로 정의한 다음




해당 영역에 대해 중적분을 해주면



이렇게 생긴 도형과 xy평면 사이의 부피가 구해집니다.

min() 함수로 인해 특정 높이부터 xy와 평행한 평면이 되는 것이 보입니다.

구하고자 하는 값은 1차원 값인 평균 딜량이므로 부피를 바닥 면적인 (x2-x1)(y2-y1)으로 나누고 식을 정리하면 됩니다.

막상 해보면 min()때문에 x1y1, x1y2, x2y1, x2y2, M의 대소 관계에 따라 구간을 나눠서 각각 구해야 하고, 일부 구간을 제외하면 귀찮은 계산이 더 들어가므로... 전체 풀이는 패스.






위 내용을 종합해서 파이썬 코드로 표현하면 이렇게 됩니다.

dpm 모듈에서 사용되고 있는 코드입니다.




---


이야기들은 아무때나 내키는 주제로 작성합니다.

개발하면서 쌓인 자료들을 잊어버리기 전에 기록, 공유하는 목적입니다.

dpm 등 메이플 관련 자료를 만드는 분들께 조금이라도 도움이 되었으면 합니다.

감사합니다.