Algorithm/문제풀이

[leetcode] 3079. Find the Sum of Encrypted Integers - Rust

Razelo 2024. 5. 3. 15:51

leetcode 문제 중 Rust의 다양한 타입변환을 참고하기 좋은 문제가 있어 기록해둔다. 

 

 

자세한 내용은 주석에 상세하게 적어두었으니 참고바란다. 

 

알고리즘 문제 풀이 중 가장 기본적인 내용은 타입간 변환이다. i32 -> char -> char 's  -> string -> i32 -> 혹은 u8 u32 usize 등으로 변환이 자유자재로 가능해야한다. 

 

이게 안되면 중간에 막히는 곳이 너무 많다. 

 

 

/**
    1530 ~ 1545 
    
    i32 <-> char's <-> string간 변환이 핵심인 듯 하네요 
*/
impl Solution {
    pub fn sum_of_encrypted_int(nums: Vec<i32>) -> i32 {
        let mut output = 0; 

        for num in nums { 
            let n = num.to_string().len(); 
            let max_c: i32 = Solution::find_max_digit(num); 
            
            let mut max_cc: char = 'a';  
            if let Some(cc) = std::char::from_u32(max_c as u32) {  // i32 -> u32로 변환 가능합니다. 
                max_cc = cc; 
            }

            let new_num_chars: Vec<char> = vec![max_cc; n]; 
            let new_num_string: String = new_num_chars.iter().collect(); // Vec<char>을 String으로 바꾸고 싶다면 iter().collect()를 사용합니다. 
            let result: Result<u32, _> = new_num_string.parse(); // String을 u32로 바꾸고 싶다면 parse()를 사용해야합니다. 
            if let Ok(new_num_num) = new_num_string.parse::<u32>(){  // 이 경우 Result가 반환되어서 이처럼 사용해야하구요 
                    output += new_num_num; 
            }
        }

        return output as i32; 
    }
    
    pub fn find_max_digit(num: i32) -> i32{ 
        let num_string = num.to_string(); 
        let chars: Vec<char> = num_string.chars().collect();  // string -> Vec<char> 로 변환합니다. 

        let mut max_c = 0; 
        for c in chars { 
            let c_digit = c as u8 as i32; 
            if c_digit > max_c { 
                max_c = c_digit; 
            }
        }
        return max_c as i32; 
    }
}
반응형