본문 바로가기
Programming/Java

[다그닥 기사단] 유물 강화 100레벨 달성에 필요한 유물 수의 기대값 계산하기

by 우공80 2023. 3. 12.
728x90


다그닥 기사단이라는 게임을 시작했습니다. 

다그닥 기사단에는 유물이라는 시스템이 있는데, 보석을 사용해서 유물을 뽑을 수 있고, 유물은 공격력, 체력 등의 능력치를 올릴 수 있습니다. 
유물 레벨은 100레벨까지인데, 1레벨 올릴 때마다 유물이 한개 소모되고, 레벨업 성공 확률은 100%에서 1%씩 감소합니다. 처음 레벨업할 때는 유물 한개당 거의 1레벨씩 오르는데, 점점 레벨업 확률이 떨어져서 소모되는 유물 수가 늘어납니다. 그래서 총 몇개의 유물이 있어야 100레벨이 될지 궁금해서 계산해보았습니다.

100레벨에 도달하기 위해 필요한 유물의 수 계산하기

결과만 우선 말씀드리자면, 100레벨이 되기위해 필요한 유물의 수는 573개입니다.
단, 개인의 운에 따라 더 적게 들수도 더 많이 들수도 있습니다. 평균적인 값이라고 보시면 되겠습니다.
기본적으로 아래와 같이 계산이 가능합니다. 

유물이 0레벨 → 1레벨로 강화될 때는 100% 확률 → 유물 1개 필요 (100/100)
유물이 1레벨 → 2레벨로 강화될 때는 99% 확률 → 유물 1.01개 필요 (100/99)
유물이 2레벨 → 3레벨로 강화될 때는 99% 확률 → 유물 1.02개 필요 (100/98)
...
유물이 98레벨 → 99레벨로 강화될 때는 2% 확률 → 유물 50개 필요 (100/2)
유물이 99레벨 → 100레벨로 강화될 때는 1% 확률 → 유물 100개 필요 (100/1)

 

계산을 위한 Java 코드

계산기로는 하기 어려우니, Java로 코딩했습니다.

import java.util.Scanner;

public class StrengthenTheArtifact {
    public static void main(String[] args) {
        double[] successProbabilities = new double[100];
        int requiredStones = 0;
        Scanner sc = new Scanner(System.in);

        System.out.print("도달하고자 하는 유물레벨을 입력하세요: ");
        int targetLevel = sc.nextInt();
        sc.close();

        // 성공 확률 계산
        for (int i = 0; i < 100; i++) {
            successProbabilities[i] = (100 - i) / 100.0;
        }

        // 유물 필요 개수 계산
        for (int i = 0; i < targetLevel; i++) {
            double probability = successProbabilities[i];
            requiredStones += Math.ceil(1 / probability);
        }

        System.out.println("유물레벨"+targetLevel+"을 만들기 위해 필요한 유물의 수는 " + requiredStones + "개입니다.");
    }
}

Output:

도달하고자 하는 유물레벨을 입력하세요: 100
유물레벨90을 만들기 위해 필요한 유물의 수는 573개입니다.

도달하고자 하는 유물레벨을 입력하세요: 90
유물레벨을 90을 만들기 위해 필요한 유물의 수는 277개입니다.

도달하고자 하는 유물레벨을 입력하세요: 70
유물레벨을 70을 만들기 위해 필요한 유물의 수는 161개입니다.

일괄 레벨업 기능이 없어서 손가락이 부러질것 같습니다. 유물 종류가 수십종이거든요.
열심히 손가락을 놀려봐야겠습니다.

728x90

댓글