Update solution for 별_찍기_-_10 w/ id 19017654
Time: 64ms MemUsage: 31796KB
This commit is contained in:
59
baekjoon/별_찍기_-_10/solution_19017654.rs
Normal file
59
baekjoon/별_찍기_-_10/solution_19017654.rs
Normal file
@@ -0,0 +1,59 @@
|
||||
use std::io::{self, Write, BufWriter};
|
||||
|
||||
fn main(){
|
||||
let mut n = String::new();
|
||||
io::stdin().read_line(&mut n)
|
||||
.expect("Failed to read line");
|
||||
let n = n.trim().parse::<usize>().expect("Not an integer");
|
||||
let mut vector : Vec<Vec<char>> = vec![vec!['*'; n]; n];
|
||||
|
||||
let k = log3(&n);
|
||||
fill_star(&mut vector, k, 0, 0);
|
||||
print_star(vector);
|
||||
}
|
||||
|
||||
fn log3(n : &usize) -> usize{
|
||||
let mut m : usize = 1;
|
||||
let mut k : usize = 0;
|
||||
|
||||
while m < *n{
|
||||
m *= 3;
|
||||
k += 1
|
||||
}
|
||||
|
||||
return k;
|
||||
}
|
||||
|
||||
fn fill_star(vector : &mut Vec<Vec<char>>, n : usize, a : usize, b : usize){
|
||||
// remove star
|
||||
let length_box : usize = 3_usize.pow((n - 1) as u32);
|
||||
let (istart, jstart) : (usize, usize) = (length_box * (3 * a + 1), length_box * (3 * b + 1));
|
||||
for i in istart .. istart + length_box{
|
||||
for j in jstart .. jstart + length_box{
|
||||
vector[i][j] = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
if n == 1{
|
||||
return;
|
||||
}
|
||||
|
||||
// go to smaller box
|
||||
let list_idx : [(usize, usize); 8] = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1), (2, 2)];
|
||||
for (i, j) in &list_idx{
|
||||
fill_star(vector, n - 1, 3 * a + i, 3 * b + j);
|
||||
}
|
||||
}
|
||||
|
||||
fn print_star(vector : Vec<Vec<char>>){
|
||||
let stdout = io::stdout();
|
||||
let lock = stdout.lock();
|
||||
let mut buff = BufWriter::new(lock);
|
||||
|
||||
let length = vector.len();
|
||||
for i in 0..length{
|
||||
let s : String = vector[i].iter().collect();
|
||||
buff.write_fmt(format_args!("{}\n", s)).expect("Failed to write");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user