728x90
문제 : 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.
이 문제는 판별을 해야 하기 때문에 for 문을 사용을 해야 한다.
use std::io;
fn main() {
let mut arr = String::new();
io::stdin()
.read_line(&mut arr)
.expect("입력을 읽을 수 없습니다.");
let arr: Vec<u32> = arr
.trim()
.split_whitespace()
.map(|x| x.parse().expect("잘못된 입력입니다."))
.collect();
let max_value = arr.iter().max();
let mut c = 0;
let mut s = 0;
let mut n = 0;
for i in 0..arr.len() {
for j in (i + 1)..arr.len() {
if arr[i] == arr[j] {
c += 1;
n = arr[j];
}
}
}
if c == 3 {
s = 10000 + (arr[0] * 1000);
println!("{}", s);
} else if c == 1 {
s = 1000 + (n * 100);
println!("{}", s);
} else if c == 0 {
match max_value {
Some(&max) => println!("{}", max * 100),
None => println!("빈 배열입니다."),
}
}
}
let max_value = arr.iter(). max(); 이 문장에서 arr에 주사위 숫자를 받은 것을. iter() <- 배열을 순화하며 호출하는 메서드이고,. max()는 각각의 요소에 접근하면서 최댓값을 찾게 해주는 메서드이다. 그러므로 가장 큰 값을 max_value에 넣어준다.
for i in 0.. arr.len() 반복문은 0을 i에 대입한다고 생각하면 된다... arr.len()은 arr배열의 길이까지 반복한다고 생각하면 된다.
arr.len() = 3이라면 0,1,2 3번 반복한다고 생각하면 된다. (끝 값 -1)
그다음 똑같은 숫자가 있는지 c(count)에 따라 if문을 작성하면 된다.
마지막 c == 0에서 match라는 표현식을 볼 수 있는데 이 것은 밑에 조건을 달아서 조건이 참일 때 => 코드를 실행할 수 있다.
굳이 match를 사용해야 되냐고 생각을 할 수 있는데 iter()을 사용하면 [1,2,3] 이렇게 백터 값으로 변환이 되고. max() 메서드를 추가하면
Some(3)으로 옵션값 Option <&u32>으로 바꾸어지는 것을 확인할 수 있다. match를 사용하면 잘 못된 값에 대하여 반환을 설정할 수 있다.
무엇인지 잘 모르겠다 하면
//변경 전
else if c == 0 {
match max_value {
Some(&max) => println!("{}", max * 100),
None => println!("빈 배열입니다."),
}
//변경 후
else if c == 0 {
println!("{}", max_value.unwrap() * 100)
}
Option 또는 Result와 같은 결과 타입에서 값을 추출하는 메서드 unwrap()을 사용해서 바꾸어서 사용하면 된다.
'RUST' 카테고리의 다른 글
[ 백준 | RUST ] 10950번 :: A + B -3 (0) | 2023.09.29 |
---|---|
[ 백준 | RUST ] 2739 :: 구구단 (0) | 2023.09.29 |
[ 백준 | RUST] 2525 :: 오븐 시계 (0) | 2023.09.29 |
[ 백준 | RUST ] 2884 :: 알람 시계 (0) | 2023.09.29 |
[ 백준 | RUST ] 14681 :: 사분면 구하기 (0) | 2023.09.29 |