Leetcode Java Implement Rand10() Using Rand7()

업데이트:

문제

Link

코드

/**
 * The rand7() API is already defined in the parent class SolBase.
 * public int rand7();
 * @return a random integer in the range 1 to 7
 */
class Solution extends SolBase {

  public int rand10() {
    while (true) {
      int num = (7 * (super.rand7() - 1)) + super.rand7();
      if (num <= 40) {
        return (num % 10) + 1;
      }
    }
  }

}

결과

Link

설명

  1. 1 ~ 7까지 균등한 임의 정수를 반환하는 rand7() API가 주어지면, 해당 API만 활용하여 1 ~ 10까지 균등한 임의 정수를 반환하는 rand10() 메서드를 완성하는 문제이다.

  2. 아래를 만족하여 결과를 반환하기 전까지 계속 반복을 수행한다.

    • num에 $7 \times (super.rand7() - 1) + super.rand7()$의 결과를 넣어준다.
      • $rand7() - 1$은 0 ~ 6까지의 정수가 가능하며, 7을 곱해주면 0 ~ 42까지 정수가 가능하다.
      • 위의 값에 rand7()의 결과를 더하면 0 ~ 49까지 정수로 이루어질 수 있다.
    • num의 결과가 40 이하인 경우, $\frac{num}{10} + 1$ 결과를 반환한다.
      • 0 ~ 49까지 정수를 10으로 나눈 나머지는 0 ~ 9로 이루어지며, 1을 더해주면 균등한 확률의 1 ~ 10까지 정수로 생성된다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기