본문 바로가기

컴퓨터 과학/자료구조, 알고리즘

[Rust로 백준 하루 하나] 7-2. 최댓값

문제 (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