Leetcode Java Reach a Number

업데이트:

문제

Link

코드

class Solution {

  public int reachNumber(int target) {
    target = Math.abs(target);
    int numMoves = 0;
    while (target > 0) {
      target -= ++numMoves; 
    }
    if (target != 0 && target % 2 != 0) {
      while (target % 2 != 0) {
        target -= ++numMoves;
      }
    }
    return numMoves;
  }

}

결과

Link

설명

  1. 0에서 시작하여 target까지 가기 위한 최소한의 이동 횟수를 구하는 문제이다.
    • 이동은 좌측(-) 혹은 우측(+)으로 이동이 가능하다.
    • 각 이동은 1부터 점층적으로 증가하는 숫자만큼 이동이 가능하다.
  2. target에 target의 절댓값을 넣어준다.

  3. numMoves를 0으로 초기화 하고, target이 0 이상일 때 까지 numMoves 증가시키고 target에서 빼준다.

  4. target이 0이 아니면서, 홀수인 경우 정확히 target에 도달하지 못하므로 아래를 수행한다.
    • target이 짝수가 될 때까지 3번과 동일하게 numMoves 증가시키고 target에서 빼주어 이동 횟수를 계산한다.
  5. 계산된 최소 이동 횟수인 numMoves를 주어진 문제의 결과로 반환한다.

소스

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

댓글남기기