본문 바로가기

알고리즘

[Rust] 백준 2744 대소문자 바꾸기

Rust 함수들과 option 개념을 알게 되었던 문제

처음에 c 생각하면서 무지성으로 짠 코드

use std::io;
use std::char::from_u32;

fn main() {
    let mut s = String::new();
    let mut ans = String::new();
    io::stdin().read_line(&mut s).unwrap();

    for c in s.chars() {
        if c>='a' && c<='z' {
            ans.push(from_u32(c as u32 - 'a' as u32 + 'A' as u32).unwrap());
        }
        else if c>='A' && c<='Z' {
            ans.push(from_u32(c as u32 - 'A' as u32 + 'a' as u32).unwrap());
        }
    }

    println!("{}",ans);
}

c처럼 char에 숫자 더해서 아스키코드값 이용하는게 잘 안되었다

게다가 from_u32라는 함수를 사용하면 option에 쌓여서 나와서 unwrap을 해주어야했다

친구가 실제 코드에서는 이렇게 대충 unwrap하면 큰일날수도 있다고 한다ㅋㅋㅋ

 

아무튼 어찌저찌 제출은 성공했으나 코드가 너무 못생겨서 다른 사람들 코드를 참고해서 새로 짜봤다

use std::io;

fn main() {
    let mut s = String::new();
    io::stdin().read_line(&mut s).unwrap();

    for c in s.chars() {
        if c.is_uppercase() {
            print!("{}",c.to_lowercase());
        }
        else if c.is_lowercase() {
            print!("{}",c.to_uppercase());
        }
    }
}

이렇게 간단하게 짤 수 있다니..

처음 짠 코드가 부끄러워지는 순간ㅋㅋㅋ