문제 (2566번)
<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
예를 들어, 다음과 같이 81개의 수가 주어지면
<그림1>
이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
풀이
코드
use std::io;
fn main() {
// 입력
let mut input = String::new();
for _ in 0..9 {
io::stdin().read_line(&mut input).unwrap();
}
let input: Vec<u32> = input
.split_whitespace()
.map(|x| x.trim().parse::<u32>().unwrap())
.collect();
let max = input.iter().max().unwrap();
println!("{}", max);
// println!("{:?}", input);
let position = input.iter().position(|v| v == max).unwrap();
println!("{} {}", position/9+1, position-(position/9)*9+1);
// println!("{:?}", matrix.iter().flatten().position(|m| m == max));
}
해설
크기가 정해진 배열이므로 1차원 배열로 나열하고 최댓값의 인덱스를 열 개수인 9로 나눈 몫과 나머지를 활용하면 행 번호와 열 번호를 각각 구할 수 있다는 점을 활용하여 풀었습니다.
이러한 방법으로 2차원 배열을 사용할 필요성을 느끼지 못하였는데 2차원 배열로 푸는 것이 더 좋은 이유가 있다면 댓글로 알려주시면 감사하겠습니다.
추가 학습
- position
'컴퓨터 과학 > 자료구조, 알고리즘' 카테고리의 다른 글
[Rust로 백준 하루 하나] 7-4. 색종이 (0) | 2024.09.02 |
---|---|
[Rust로 백준 하루 하나] 7-3. 세로읽기 (0) | 2024.09.02 |
[Rust로 백준 하루 하나] 7-1. 행렬 덧셈 (0) | 2024.08.31 |
[Rust로 백준 하루 하나] 6-8. 너의 평점은 (0) | 2024.08.30 |
[Rust로 백준 하루 하나] 6-7. 그룹 단어 체커 (0) | 2024.08.30 |