본문 바로가기

HackerRank

[해커랭크] (Implementation Algorithms) Number Line Jumps (javascript)

캥거루 두마리가 각각 다른 위치에서 다른 속도로 점프할 경우, 같은 시간에 같은 위치에 존재하는 여부 반환

규칙

  • 첫 번째 캥거루의 시작 위치는 x1, 이동간격은 v1
  • 두 번째 캥거루의 시작 위치는 x2, 이동간격은 v2
  • ex) x1 = 0, v1 = 3 / x2 = 4, v2 = 2 

제한사항

  • 0 ≤ x1 ≤ x2 ≤ 10000
  • 1 ≤ v1 ≤ 10000
  • 1 ≤ v2 ≤ 10000

 

나의 풀이

  • 두 번째 캥거루의  이동간격이 첫 번째 캥거루 보다 큰 경우는 평생 동일 시간대에 만날 수 없음
  • 두 캥거루가 만날 때 까지 확인하기 위한 범위값 구하기 
    •   대략 (첫 번째 캥거루의 시작위치 + 이동간격) * (두 번째 캔거루의 시작위치 + 이동간격) 값 안에서는 구할 수 있지 않을까 생각
      • 최소한의 범위로 구하고자 제곱근 활용
        • 왜?: 문제에 주어진 예제를 봤을 때, 대충 그정도 값 안에 구해지길래...
          • 자세한 이유 조사 필요
// 생략

/*
 * Complete the 'kangaroo' function below.
 *
 * The function is expected to return a STRING.
 * The function accepts following parameters:
 *  1. INTEGER x1
 *  2. INTEGER v1
 *  3. INTEGER x2
 *  4. INTEGER v2
 */

function kangaroo(x1, v1, x2, v2) {
    // Write your code here
    if (v2 > v1) {
    
      return 'NO';
    }
    
    let finish = 'NO';
    
    for(let i = 0; i < Math.sqrt((x1+v1)*(x2+v2))+1; i++) {
      if (x1+v1*i === x2+v2*i) {
        finish = 'YES';
        break;
      }
    }
    
    return finish;
}

// ..후략

결과