Profile image

Kim Songhyun

카카오 프론트엔드 개발자 since 2018. 01.

갑자기 생각나서 메이플스토리를 다시 잡은지 대략 5달이 좀 넘게 지났다. 나는 게임은 좀 아쉽게(?) 해야 향상심이 생긴다는 주의라 일부러 현질도 안 하고 경매장 기능도 안 쓰면서 게임을 하고 있다. 원래는 적당히 돈을 모아서 상위 보스가 드랍하는 장비를 경매장에서 사 쓰는 게 일반적인 방식이다. 경매장을 안 쓰고 있으니 내가 잡을 수 있는 수준의 보스 장비만 끼는 것이다. 그래도, 워낙 오래된 게임이다 보니 비교적 쉬운 방법으로 강해질 수 있는 시스템이 천지사방에 깔려 있어서 이래저래 메린이(메이플+어린이, 입문자 수준이라는 뜻) 레벨까지는 도달한 듯하다.

메린이를 넘어 메청소년으로 가기 위해서는 좀 더 어려운 방법을 써야 한다. 구체적으로 말하자면 더 많은 돈을 써서 더 낮은 확률로 강해져야 한다는 뜻이다. 종류도 엄청나게 많지만, 장비 강화에 한해서만 말하자면 대략 이렇다.

17년 된 게임은 장비 강화 시스템도 이렇게 많다

큰 틀에서 보면 둘 중 하나다.

  1. 실패 확률이 있는 강화를 한다.
  2. 랜덤 옵션이 붙는 강화를 마음에 드는 옵션이 뜰 때까지 한다.

둘 다 무작정 자본을 들이붓다 보면 언젠가 원하는 수준으로 강해질 수 있다는 점에서는 똑같지만, 어쨌든 원하는 옵션이 뜰 확률이 n%로 귀결되는 2번 방법에 비해 1번 방법은 생각해볼 여지가 좀 더 있다. 메이플스토리 세상에서는 강화를 실패하면 실패 1회 복구권이나 강화 초기화권을 이용해 지금까지 있었던 실패를 없던 일로 할 수 있다. 한 가지 문제가 있다면 복구권과 초기화권은 같은 재화를 사용하며, 필요 재화량이 무시할 수 없을 만큼 크고, 성공 확률도 좀 낮은 편이라는 것이다. 따라서 확률 소리만 들으면 일단 계산부터 해 봐야 하는 나같은 사람들에 의해서 어떤 방식이 효율적인지에 대한 연구가 계속되어 왔다.

시스템상 정식 명칭은 업그레이드이지만, '주문의 흔적'이라는 재화를 사용하기 때문에 유저들은 일반적으로 업그레이드를 '주흔작'이라고 부른다. 실패 1회 복구권은 '순백의 주문서'(줄여서 순줌)라고, 강화 초기화권은 '이노센트 주문서'(줄여서 이노)라고 부른다.

여러분이 오늘 이 글을 통해 간접적으로 체험해볼 시스템

너무 복잡한 상황이 되지 않도록 하기 위해서 약간의 제약조건을 추가했다.

  1. 강화 횟수는 부위당 8회라고 가정한다.
  2. 피버타임, 버프나 스킬 등으로 인한 강화 성공률 추가값은 무시한다.
  3. 강화 성공률은 30%에 주흔 500개를 소모한다.
  4. 순줌 성공률은 5%에 주흔 2,000개를 소모한다. 성공 시 실패한 강화를 1회 복구하여 다시 강화할 수 있는 상태가 된다.
  5. 이노 성공률은 30%에 주흔 5,000개를 소모한다. 성공 시 모든 강화를 초기화한다(성공한 강화도 초기화된다).

퍼센티지와 소모 재화량을 보면 알겠지만, 강화 시도보다는 강화횟수 복구에 훨씬 더 많은 재화를 소모하는 구조다. 실제 인게임상에서는 일요일 피버타임(1회 시도 시 소모하는 주흔 갯수 절반, 확률 상승), 강화확률 버프(강화 성공률 최대 14% 추가, 순줌/이노에는 적용되지 않음) 등을 덕지덕지 발라서 여기서 진행하는 시뮬레이션보다는 훨씬 싼 가격에 강화를 마무리할 수 있긴 하다. 실제로 메이플을 즐기시는 분들은 적당히 재미로만 보고 필요하다면 자신의 상황에 맞게 확률을 조정하기 바란다.

첫 번째 방법: 각 경우의 수에 대한 주흔 소모량 구하기

일단 4번, 5번 제약조건에 대해 생각해보자. 주흔 소모량*1/확률을 계산하여 1회 성공 시 주흔 소모량의 기댓값을 구해볼 수 있겠다. 따라서, 순줌 1회 성공까지 평균적으로 2000/0.05 = 40000개, 이노 1회 성공까지 평균적으로 5000/0.3 = 16666개 정도의 주흔을 사용한다.

일단 1회차, 난 운이 좋으니 한 번에 못해도 6개 정도는 성공하겠지라는 행복회로를 돌리며 8번의 강화 시도를 모두 사용했을 때 일어나는 사건은 총 9가지(0~8)이며, 실패 횟수를 모두 복구하는 데 드는 재화의 소모량은 다음과 같다.

성공 횟수 실패를 복구할 때 강화 자체를 초기화할 때
0 8*40000 16666
1 7*40000 16666
2 6*40000 16666
... ... ...
7 1*40000 16666
8 0 0

적당한 수치가 나와서 만족한 찰나 무언가 이상하다는 생각이 들었다. 7번이나 성공했는데도 초기화하고 다시 강화하는 게 낫다고? 당연히 말이 안 된다. 잠깐 고민해 보니 1회차 이후 2회차 강화비용을 완전히 무시하고 계산했다는 사실을 깨달았다. 만약 7번 성공한 뒤 강화를 초기화하고 2회차 강화를 시도했는데 모든 강화를 실패한다면? 당연히 한 번 많은 양의 재화가 깨지더라도 순줌으로 복구하는 쪽이 나을 것이다. 이쯤 되었을 때 문제가 생각보다 까다롭다는 걸 알았다. 실제 상황이라면 n회차 시도를 전제해야 한다. 내 수준에서는 이 모든 경우의 수를 전부 계산할 수는 없다는 결론이 나왔다.

두 번째 방법: 시뮬레이션

확률 공부를 열심히 했다면 뭔가 다른 해결책이 있었을지도 모르겠지만 나는 뼛속까지 컴공이기 때문에 다른 방법을 사용해 보기로 했다. n번 이상 강화가 실패할 경우 무조건 이노를 사용하는 가상의 게이머를 만들어서 강화가 완료될 때까지 드는 주흔 갯수를 세면 되지 않을까? 여기까지 생각이 닿았을 때 시뮬레이터를 구현하기 시작했다(링크는 아래에).

돌려보니 잘 나오는 것 같다! 다만 문제가 좀 있었다.

두 번째 방법 +α+\alpha: 큰 수의 법칙

랜덤함수가 세 군데나 들어가는 시뮬레이터답게 운이 좋으면 금방 끝나는 케이스도, 숫자에 압도될 정도로 엄청난 양의 주흔이 들어가는 케이스도 있게 마련이다. 적당한 경향성이 있으면 좋겠는데 적게는 몇십만 개, 많게는 몇백만 개의 재화 차이가 나서 신뢰성이 좀 떨어졌다.

이 때 뇌리에 떠오른 것이 큰 수의 법칙이었다. 위키백과에서는 큰 수의 법칙을 이렇게 설명한다.

큰 모집단에서 무작위로 뽑은 표본의 평균이 전체 모집단의 평균과 가까울 가능성이 높다는 통계와 확률 분야의 기본 개념이다.

말이 좀 어려운데, 시행 횟수를 늘리면 알려지지 않은 실제 확률에 근접한다는 뜻이다. 동전 던지기를 예로 들면, 운이 정말 좋으면 5번 동전을 던져서 다섯 번 다 앞면이 나올 수 있지만, 5만 번 던지면 24000~26000번 정도로 앞면이 나올 확률 50%에 수렴해 간다는 뜻이다. 시행횟수를 늘리면 늘릴수록 근사치는 점점 실제 확률에 가까워진다. 지금처럼 정확한 확률을 계산하기 어려운 경우 쓰기 좋은 방법이다.

대충 각각 만 번씩 테스트하는 시뮬레이터를 다시 만들었다.

시뮬레이션 결과물은 아래와 같다.

n회 실패 시 초기화 평균 재화 소모량
1회 187,777,968.3개
2회 10,199,560개
3회 1,464,792.15개
4회 591,846.05개
5회 532,979.3개
6회 584,959.3개
7회 658,991.2개
순줌만 사용 703,259.4개

5회 실패했을 때 이노를 바르는 것이 가장 효율적이며, 이 때 대충 53만 개 정도의 주흔을 소모한다는 것을 알 수 있다.