์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ๋ฌ์คํธ
- Python challenge
- ์๋ฐ
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- ํ์ด์ฌ ์ฒผ๋ฆฐ์ง
- OS
- ์๋ฐ ๊ธฐ์ด
- ์ค๋ผํด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- java
- Rust
- Database
- ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ๊ณต์ ๊ฐ์ด๋
- ์ฐ๋ถํฌ
- C
- ๋ฐฑ์ค
- ๋ฐ์ดํฐ ํต์
- ๋ฌ์คํธ ์์
- data communication
- ํ์ด์ฌ ์ฑ๋ฆฐ์ง
- Python
- ์๊ณ ๋ฆฌ์ฆ
- ์๋ฐ ๊ฐ๋
- Reversing
- ํ์ด์ฌ
- Operating System
- ubuntu
- ์ด์์ฒด์
- ๋ฐฑ์ค ๋ฌ์คํธ
- ์ค๋ผํดDB
Archives
- Today
- Total
IT’s Portfolio
[Rust] Start Rust (Day 15) - Rust Example Script 3 [Get Avg & Mid & Mode] ๋ณธ๋ฌธ
Development Study/Rust
[Rust] Start Rust (Day 15) - Rust Example Script 3 [Get Avg & Mid & Mode]
f1r3_r41n 2023. 2. 25. 12:41728x90
๋ฐ์ํ
๐ฆ Rust Day 15
๐ณ๏ธ Rust Example Script 3 - Get Avg & Mid & Mode
1๏ธโฃ Description
- ์ ์ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฒกํฐ๋ฅผ ์ด์ฉํ์ฌ ํ๊ท ๊ฐ, ์ค๊ฐ๊ฐ, ์ต๋น๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ ์์ฑ
2๏ธโฃ how it works
i32
ํ์ ์ ์ ์ ๋ฐฐ์ด์ด ์ฃผ์ด์ง- ํด๋น ๋ฐฐ์ด์ ํ๊ท ๊ฐ, ์ค๊ฐ๊ฐ, ์ต๋น๊ฐ์ ์์๋๋ก ์ถ๋ ฅ
3๏ธโฃ Code
// src/main.rs
mod changer;
use crate::changer::operations;
fn main() {
let nums: Vec<i32> = operations::make_integers();
let mode = operations::get_mode(&nums);
println!(
"ํ๊ท ๊ฐ : {}",
match operations::get_avg(&nums) {
Some(avg) => avg.to_string(),
None => "๊ฐ์ด ์์".to_string(),
}
);
println!(
"์ค๊ฐ๊ฐ : {}",
match operations::get_mid(&nums) {
Some(mid) => mid.to_string(),
None => "๊ฐ์ด ์์".to_string(),
}
);
println!(
"์ต๋น๊ฐ : {}", {
if mode.len() == 0 {
"๊ฐ์ด ์์".to_string()
} else {
let mut s = String::new();
for i in mode {
s.push_str(&i.to_string());
s.push(' ');
}
s
}
}
);
}
// src/changer.rs
pub mod operations {
pub use std::collections::HashMap;
// vec! ๋งคํฌ๋ก๋ฅผ ์ฐ๊ณ ์ถ์ง ์์ ๋ง์์ ์์ฑํ ํจ์
pub fn make_integers() -> Vec<i32> {
// ๋ฐฐ์ด ๊ฒ์ ์จ๋จน์ผ๋ผ ์๋ ๊ฒ.
let mut n: Vec<i32> = Vec::new();
let mut nums: [i32; 17] = [20, 17, 114, 24, 14, 170, 141, 67, 20, 4, 78, 404, 19, 67, 221, 67, 20];
// ์ญ์ฐธ์กฐ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ nums์ ์์๋ค์ 1์ ๋ํ ํ ๊ฐ์ ๋ฒกํฐ์ push
for i in &mut nums {
*i += 1;
n.push(*i);
}
// ๋ฒกํฐ ์ ๋ ฌ
n.sort();
n
}
// ์ค๊ฐ๊ฐ์ ๊ตฌํ๋ ํจ์
pub fn get_mid(nums: &Vec<i32>) -> Option<i32> {
if nums.len() == 0 { return None; }
Some(nums[nums.len()/2])
}
// ์ต๋น๊ฐ์ ๊ตฌํ๋ ํจ์
pub fn get_mode(nums: &Vec<i32>) -> Vec<i32> {
if nums.len() == 0 { return Vec::new(); }
// nums์ ์์๋ค์ ๋น๋์๋ฅผ ๋งค์นํ๋ HashMap ์ธ์คํด์ค
let mut map = HashMap::new();
// ์ต๋น๊ฐ์ ๊ณจ๋ผ๋ด ์ ์ฅํ ์ฉ๋์ธ HashMap ์ธ์คํด์ค
let mut result: HashMap<i32, i32> = HashMap::new();
// for ๋ฃจํ์์ ํ์ฌ ํค์ ์ฐ๊ฒฐ๋ ๊ฐ๊ณผ ๋น๊ตํ๊ธฐ ์ํด ํค ๊ฐ์ ์ ์ฅํ ์์์ ์ธ ๋ณ์
let mut tmp = 0;
// tmp์ ๊ฐ๊ณผ ๋น๊ต ํ ๊ฒฐ๊ณผ๋ก ๋์จ ํค์ ๊ฐ์ ์ ์ฅํ ์์์ ์ธ ๋ณ์
let mut tmp2 = 0;
// nums ์์๋ค์ ๋ํ ๋น๋์๋ฅผ HashMap ์ธ์คํด์ค์ ์ ์ฅ
for i in nums {
// entry() => ๊ฐ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์๋ ค์ฃผ๋ Entry ์ด๊ฑฐ์๋ฅผ ๋ฐํํจ
// or_insert() => Entry ์ด๊ฑฐ์์ ์ ์ธ๋ ๋ฉ์๋
// ํค ์กด์ฌ ์ ํด๋น ํค์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ํ ๊ฐ๋ณ ์ฐธ์กฐ๋ก ๋ฐํํจ
// ํค ์กด์ฌํ์ง ์์ ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ํค์ ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ ํ ํด๋น ๊ฐ์ ๋ํ ๊ฐ๋ณ ์ฐธ์กฐ๋ฅผ ๋ฐํํจ
let count = map.entry(i).or_insert(0);
*count += 1;
}
// map์ ์์๋ค์ ํ ๋ฒ์ฉ ๋๋ฉฐ ๋น๊ตํ๋ for ๋ฃจํ
for (key, value) in map {
// ํด๋น ์ปฌ๋ ์
์ด ๋น์ด์๋์ง๋ฅผ bool ํ์
์ผ๋ก ๋ฐํํ๋ is_empty ๋ฉ์๋
// ๋๋ฌธ์ match ํํ์ ์ฌ์ฉ
match result.is_empty() {
// result๊ฐ ๋น์ด์์ ๊ฒฝ์ฐ ํ์ฌ ํค์ ๊ฐ์ insert ํ ํฌ์ธํฐ ์ญํ ์ ํ๋ tmp์ ํค๋ฅผ ์ ์ฅ
true => {
result.insert(*key, value);
tmp = *key;
},
// result๊ฐ ๋น์ด์์ง ์์ ๊ฒฝ์ฐ tmp์ ์ ์ฅ๋์ด ์๋ ํค๋ฅผ ์ด์ฉํด ๊ฐ ํธ์ถ ๋ฐ ๋น๊ต
false => {
// HashMap์ get ๋ฉ์๋๋ Option ์ด๊ฑฐ์๋ฅผ ๋ฐํํจ
// ๋๋ฌธ์ match ํํ์ ์ฌ์ฉ
match result.get(&tmp) {
// tmp์ ์ ์ฅ๋์ด ์๋ ํค๋ก ๊ฐ์ ์ฐพ์ ์ ์๋ค๋ฉด tmp2์๋ tmp์ ์์ํ๋ ๊ฐ์ ์ ์ฅ
Some(n) => { tmp2 = *n; },
None => { },
}
// ๋ง์ฝ ํ์ฌ value๊ฐ tmp2์ ๊ฐ๋ค๋ฉด result์ ์ถ๊ฐํ ํ ํฌ์ธํฐ๋ฅผ ๋ค์์ผ๋ก ํค๋ก ์ฎ๊ฒจ์ค
// value๊ฐ tmp2๋ณด๋ค ์๋ค๋ฉด ์ต๋น๊ฐ์ด ๋ ์ ์์ผ๋ฏ๋ก ์๋ฌด ์์
๋ ํ์ง ์๊ณ ๋์ด๊ฐ
// value๊ฐ tmp2๋ณด๋ค ํฌ๋ค๋ฉด ๊ทธ ์ ๊น์ง ์ ์ฅํ๋ ๋ค๋ฅธ ๊ฐ๋ค๋ ํ์ฌ value๋ณด๋ค ํฌ์ง ์์ ๊ฒ์ด๋ฏ๋ก
// HashMap์ ์ด๊ธฐํํ๋ clear ๋ฉ์๋๋ฅผ ์ํ ํ ํด๋น ํค์ ๊ฐ์ ์ถ๊ฐํจ
// tmp2๋ ์ ์ผ ํฐ ๊ฐ๋ง ์ ์ฅํ๋ฏ๋ก ํด๋น ๊ฐ์ผ๋ก ์์ ํจ
if value == tmp2 {
result.insert(*key, value);
tmp = *key;
} else if value < tmp2 {
continue;
} else {
result.clear();
result.insert(*key, value);
tmp2 = value;
}
},
}
}
// ์ฐ๋ฆฌ๋ ์ต๋น๊ฐ์ด ํ์ํ์ง ์ผ๋ง๋ ๋์๋์ง๋ ์ค์ํ์ง ์์ผ๋ฏ๋ก into_keys ๋ฉ์๋๋ก ํค๋ง ์ถ์ถ
// ์ถ์ถ ํ collect ๋ฉ์๋๋ก ๋ฌถ์ด์ค
result.into_keys().collect()
}
// ํ๊ท ๊ฐ์ ๊ตฌํ๋ ํจ์
pub fn get_avg(nums: &Vec<i32>) -> Option<f64> {
if nums.len() == 0 { return None; }
// ์ ์ฒด ํฉ์ ์ ์ฅํ๋ ๋ณ์
let mut tmp: i32 = 0;
for i in nums {
tmp += i;
}
Some(tmp as f64 / nums.len() as f64)
}
}
4๏ธโฃ Result
ํ๊ท ๊ฐ : 87.29411764705883
์ค๊ฐ๊ฐ : 68
์ต๋น๊ฐ : 21 68
728x90
๋ฐ์ํ
'Development Study > Rust' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Comments