use std::io;
use std::io::stdin;
use std::io::Read;
fn main() {
let mut n = String::new();
stdin().read_line(&mut n).unwrap();
let n: usize = n.trim().parse().expect("Fail");
let mut input = String::new(); //입력 받는 부분 아님
io::stdin().read_to_string(&mut input).unwrap();
let mut inp = input.split_ascii_whitespace().map(str::parse).flatten();
for _ in 0..n {
let h: i32 = inp.next().unwrap();
let w: i32 = inp.next().unwrap();
let k: i32 = inp.next().unwrap();
let mut floor: i32 = k%h;
let mut num: i32 = (k/h)+1 ;
if floor==0 {
floor=h;
}
print!("{}",floor);
if k%h==0 {
num=num-1;
}
if num<10 {
print!("{}",0);
}
print!("{}",num);
print!("\n");
}
}
문제는 정말 쉬운 브론즈3 문제지만, 코드가 제법 길다.
let n은 불변인 변수 n을 선언하는 키워드이고, let mut n은 가변 변수 n을 선언하는 키워드이다.
let mut n = String::new(); 부분은 변수를 선언만 하는 것이고, 입력은 stdin이나 io::stdin을 통해서 받는다.
(내 코드의 경우에는 한 줄만 읽을 때 stdin을, 읽지 않은 나머지를 다 읽을 때 io::stdin을 사용했다. 이거 말고도 다른 방법이 있는 지는 잘 모르겠다.)
숫자 자료형이 i32이기도 하고 usize이기도 한 이유는, 문자열을 숫자로 변환할 때 usize를 사용할 수 없는 TryInto라는 명령어를 써야 하는(정확하게는, 써야 한다고 생각하는) 경우가 있기 때문이다. (여기서는 상관없다)
입력 방식은 다른 블로그를 참고했는데, input.split_ascii_whitespace() 는 말 그대로 입력을 받아 공백을 기준으로 나눠서 저장하는 키워드이다. (flatten은 문자열을 숫자로 바꿔주는 부분이 아닌데, 이 경우는 Rust가 자체적으로 타입을 추론해서 i32가 되는 거 같다.)
이렇게 inp 변수에 공백과 줄바꿈과 함께 입력받은 여러 숫자들을 모두 저장하고, 변수 이름.next().unwrap(); 으로 원소를 하나씩 뽑아서 쓴다.
원래는 println!("{}",num); 을 주로 사용하지만, 이러면 개행문자도 출력되어 버리기 때문에 대신 print!를 사용했다.