본문 바로가기

HackerRank

[HackerRank] Number Line Jumps in Rust

반응형

단순 계산 문제임.

캥거루 1, 2가 다른 위치에서 다른 거리 만큼 점프를 하는데 점프 간격 시간은 같다. 캥거루 1, 2가 점프하기 시작한 후 동시에 같은 위치에서 점프하게 될 것인지 아닌지 여부를 구하는 문제.

조건 1 : a번째에 교차한다고 생각하면 더 먼 거리에서 시작한 캥거루의 점프 거리는 다른 캥거루보다 더 짧아야 한다.(v1>v2)

조건 2 : x2(더 먼 거리에서 시작한 캥거루의 시작 위치) + v2(더 먼 거리에서 시작한 캥거루의 점프 거리) * a번째점프 = x1(더 짧은 거리에서 시작한 캥거루의 시작 위치) + v1(더 짧은 거리에서 시작한 캥거루의 점프 거리)

use std::env;
use std::fs::File;
use std::io::{self, BufRead, Write};

/*
 * 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
 */

fn kangaroo(x1: i32, v1: i32, x2: i32, v2: i32) -> String {
    if (v1 > v2) && ((x2 - x1) % (v1 - v2) == 0)
    {
        return "YES".to_string();
    }
    else
    {
        return "NO".to_string();
    }
}

fn main() {
    let stdin = io::stdin();
    let mut stdin_iterator = stdin.lock().lines();

    let mut fptr = File::create(env::var("OUTPUT_PATH").unwrap()).unwrap();

    let first_multiple_input: Vec<String> = stdin_iterator.next().unwrap().unwrap()
        .split(' ')
        .map(|s| s.to_string())
        .collect();

    let x1 = first_multiple_input[0].trim().parse::<i32>().unwrap();

    let v1 = first_multiple_input[1].trim().parse::<i32>().unwrap();

    let x2 = first_multiple_input[2].trim().parse::<i32>().unwrap();

    let v2 = first_multiple_input[3].trim().parse::<i32>().unwrap();

    let result = kangaroo(x1, v1, x2, v2);

    writeln!(&mut fptr, "{}", result).ok();
}
반응형