본문 바로가기

Algorithm/ANA 위클리 백준

[위클리 백준] 2024 4회 (2) - 2869

https://www.acmicpc.net/problem/2869

 

 


문제 설명

하루에 A만큼 올라가고 B만큼 내려가므로 하루에 (A-B)만큼 이동합니다.

그러나 항상 그렇지는 않고 마지막 날에는 -B만큼 갈 필요가 없습니다.

그러므로 이 문제는 $A+t(A-B) \geq V$가 되는 첫 시점 t를 구하는 문제입니다.

 

식을 이항하면 $t(A-B) \geq V-A$가 되고, 그런 t를 찾으려면 $V-A \over A-B$를 올림하면 됩니다.

마지막 날 A만큼 이동했다고 가정했으므로 t에 1을 더해주면 정답이 됩니다.

 


소스 코드 / Rust

 

use std::io;

fn main() {
    let mut input_string = String::new();
    io::stdin().read_line(&mut input_string).unwrap();
    input_string = String::from(input_string.trim());
    
    let tokens: Vec<&str> = input_string.split_whitespace().collect();
    let a : i32 = tokens[0].parse().unwrap();
    let b : i32 = tokens[1].parse().unwrap();
    let mut v : i32 = tokens[2].parse().unwrap();
    
    v -= a;
    let flag : i32;
    if v == 0 {flag = 0;}
    else {flag = 1;}
    println!("{}", 1+(v-1)/(a-b)+flag);
}