본문 바로가기

알고리즘

[Rust] 백준 10807번 개수 세기

오랜만에 코딩 블로그에 글 써보기

요즘 러스트를 공부해보고 있는데 언어가 하도 낯설어서 백준으로 친해지기로 했다

solved.ac에 새싹이라는 탭이 새로 생겼길래 쉬운 문제들로 시작

 

use std::io;

fn main() {
    let mut s = String::new();
    let mut array: [i32; 201] = [0; 201];

    io::stdin().read_line(&mut s).unwrap();
    s.clear();
    io::stdin().read_line(&mut s).unwrap();

    let values:Vec<i32> = s
        .as_mut_str()
        .split_whitespace()
        .map(|s| s.parse().unwrap())
        .collect();

    for i in values {
        array[i as usize+100] += 1;
    }

    s.clear();
    io::stdin().read_line(&mut s).unwrap();
    let val: i32 = s.trim().parse().unwrap();

    println!("{}",array[val as usize+100]);
}

 

이 문제를 풀면서 알게된것

 

1.  rust read_line은 c랑 달리 변수를 새로 만드는게 아니라 기존 string에 새로운 line을 추가한다

처음에 두번째 줄에 주어질 변수의 개수가 나오는데 이게 values에 계속 포함됐다

clear를 해주거나 String::new로 새로 만들어주어야 한다

 

2. 배열의 index를 변수로 쓰려면 i as usize로 형변환을 시켜주어야 한다

안그러면

slice indices are of type `usize` or ranges of `usize`

이런 에러가 난다

 

아직 익숙해지려면 한참 걸릴 것 같지만 앞으로 화이팅