본문 바로가기

Algorithm/ANA 위클리 백준

(7)
[위클리 백준] 2024 5회 (2) - 18311 https://www.acmicpc.net/problem/18311 구현 문제 문제 설명 각 트랙의 길이를 배열에 저장하고, 배열을 순회하며 직접 달리는 것처럼 구현하면 됩니다. 또한 다시 돌아오는 것까지 생각해야 하므로 배열을 거꾸로 순회하는 과정도 추가해야 합니다. 현재 남은거리 K가 현재 트랙의 길이보다 짧으면 현재 트랙을 달리다가 멈추게 될 것이므로 현재 트랙 번호를 출력하고, 그렇지 않다면 남은 거리 K에서 트랙의 길이만큼 빼주면 됩니다. 주의할 점은 K의 범위가 나와 있지 않다는 점인데, 각 코스의 길이가 50,000이고 코스가 100,000개, 코스를 왕복해야 하므로 K의 범위는 [1, 10,000,000,000]입니다. 64비트 정수형으로 선언해야 합니다. 소스 코드 / Rust use s..
[위클리 백준] 2024 5회 (1) - 2476 https://www.acmicpc.net/problem/2476 문제 설명 분기문을 사용해서 문제에서 나온대로 작성하면 되는 문제입니다. 소스 코드 / Rust use std::io; fn get_max(a : i32, b : i32) -> i32 { if a > b { return a; } return b; } fn solve(input_string : &str) -> i32 { let toks = input_string.split_whitespace(); let mut vc : Vec = Vec::new(); for m in toks { vc.push(m.parse().unwrap()); } vc.sort(); if vc[0] == vc[1] && vc[1] == vc[2] { return 1000..
[위클리 백준] 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_..
[위클리 백준] 2024 4회 (1) - 23037 https://www.acmicpc.net/problem/23037 문제 설명 각 자릿수를 5번 곱한 후에 전부 더해주면 됩니다. 5자리 정수를 string으로 읽어서 각 자리를 int로 바꾸는 방법이 있고, int로 읽어서 10으로 나눈 나머지를 사용하는 방법이 있습니다. 저는 string에 익숙해지고자 전자를 택했습니다. 소스 코드 / Rust use std::io; fn pow_5(m : i32) -> i32 { return m*m*m*m*m; } fn main() { let mut input_string = String::new(); io::stdin().read_line(&mut input_string).unwrap(); input_string = String::from(input_string...
[위클리 백준] 2024 3회 - 9086 https://www.acmicpc.net/problem/9086 문제 설명 문자열의 0번째 char와 마지막 char을 출력하면 됩니다. 언어에 따라 접근 방식이 다른데, Java와 Rust 등에서는 char로 변환 후에 접근하면 되고 Python3와 C++ 등에서는 index로 접근 가능합니다. 소스 코드 / Rust use std::io; fn main() { let mut input_string = String::new(); io::stdin().read_line(&mut input_string).unwrap(); let mut n : i32 = input_string.trim().parse().unwrap(); while n > 0 { n -= 1; input_string.clear(); io:..
[위클리 백준] 2024 2회 - 2753 https://www.acmicpc.net/problem/2753 문제 설명 정수 n을 4로 나눈 나머지가 0이면서 100으로 나눈 나머지가 0이 아니거나, 400으로 나눈 나머지가 0이면 1을 출력합니다. 그 외의 경우는 0을 출력합니다. 소스 코드 / Rust use std::io; fn main() { let mut input_string = String::new(); input_string.clear(); io::stdin().read_line(&mut input_string).unwrap(); let n : i32 = input_string.trim().parse().expect("Cast Err"); if (n % 4 == 0 && n % 100 != 0) || n % 400 == 0 { pr..
[위클리 백준] 2024 1회 - 8393 https://www.acmicpc.net/problem/8393 문제 설명 반복문을 통해서 1부터 n까지 더해줍니다. 소스 코드 / Rust use std::io; fn main() { let mut input_string = String::new(); input_string.clear(); io::stdin().read_line(&mut input_string).unwrap(); let n : i32 = input_string.trim().parse().expect("Cast Err"); let mut ans : i32 = 0; for i in 1..=n { ans += i; } println!("{}", ans); }