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;
}
}
반응형
'Algorithm > 문제풀이' 카테고리의 다른 글
[leetcode] 2451. Odd String Difference - Rust (0) | 2024.05.03 |
---|---|
[leetcode] 1417. Reformat The String in C++ (0) | 2024.05.01 |
[BOJ] 백준 16939 - 2×2×2 큐브 - Java solution (0) | 2022.11.11 |
[BOJ] 백준 2529 부등호 - Java 풀이 (0) | 2022.10.12 |
[BOJ] 백준 16953 A → B - Python3 풀이 (0) | 2022.09.16 |