Leetcode Java Clumsy Factorial

업데이트:

문제

Link

코드

class Solution {

  public int clumsy(int n) {
    switch (n) {
      case 1: case 2: return n;
      case 3: return 6;
      case 4: return 7;
    }
    switch (n % 4) {
      case 1: case 2: return n + 2;
      case 3: return n - 1;
      default: return n + 1;
    }
  }

}

결과

Link

설명

  1. 아래를 만족하는 공식을 대입하여 값을 구하는 문제이다.
    • Factorial의 함수는 $factorial(n) = n \times (n - 1) \times … 2 \times 1$의 공식을 수행한다.
    • 이를 변조한 clumsy 함수는 $clumsy(n)= n \times (n - 1) / (n - 2) + (n - 3) - … \times 4 / 3 + 2 - 1$ 형태로 곱하기, 나누기, 더하기, 빼기 순으로 n부터 1까지 수행한 결과를 반환한다.
  2. n이 아래의 경우를 만족하면, 각 경우에 대한 값을 주어진 문제의 결과로 반환한다.
    • n이 1과 2인 경우, n을 반환한다.
    • n이 3인 경우, 6을 반환한다.
    • n이 4인 경우, 7을 반환한다.
    • n을 4로 나눈 나머지가 1과 2인 경우, $n + 2$를 반환한다.
    • n을 4로 나눈 나머지가 3인 경우, $n - 1$을 반환한다.
    • 그 외의 경우, $n + 1$을 반환한다.

해설

  • 고정된 경우인, 1 ~ 4까지는 각 계산의 결과를 반환한다.
  • 그 외의 경우, 네 산술 연산자를 수행하는 4가지 경우에 대해서 수행한 결과는 각 수행에 따라 아래와 같은 공식이 성립된다.
    • n을 4로 나눈 나머지가 1인 경우, $clumsy(5) = \frac{5 \times 4}{3} + 2 - 1 = 2$과 같이 $n + 2$이 결과로 산출된다.
    • n을 4로 나눈 나머지가 2인 경우, $clumsy(6) = \frac{6 \times 5}{4} + 3 - (2 \times 1) = 9$아 같이 $n + 1$이 나머지가 1과 동일한 결과로 산출된다.
    • n을 4로 나눈 나머지가 3인 경우, $clumsy(7) = \frac{7 \tiems 6}{5} + 4 - \frac{3 \times 2}{1} = 6$인 $n - 1$이 결과로 산출된다.
    • n을 4로 나눈 나머지가 0인 경우, $clumsy(8) = \frac{8 \times 7}{6} + 5 - \frac{4 \times 3}{2} + 1 = 9$인 $n + 1$이 결과로 산출된다.

소스

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

댓글남기기