백준 30088 - 공포의 면담실 [Rust]

[Silver V] 공포의 면담실 - 30088

Posted by Hebi on October 13, 2023

백준 알고리즘

[Silver V] 공포의 면담실 - 30088

문제 링크

성능 요약

메모리: 13420 KB, 시간: 48 ms

분류

그리디 알고리즘, 누적 합, 정렬

제출 일자

2023년 10월 13일 11:08:37

문제 설명

한국정보기술진흥원의 직원들은 6개월에 한 번 씩 전 직원이 사장님과 일대일 면담을 진행한다.

진흥원에는 N개의 부서가 있는데, 부서에 소속된 모든 직원이 모두 면담을 마쳐야 해당 부서가 퇴근할 수 있다고 한다. 면담은 한 번에 한 명씩만 진행된다.

모든 부서의 퇴근 시간의 합이 최소가 되는 값을 구하시오.

입력

첫 번째 줄에 부서의 수 N (1N1000)이 주어진다.

두 번째 줄부터 N개의 줄에 걸쳐서 부서별 직원의 수와 직원당 면담에 소요되는 시간이 공백으로 구분되어 주어진다. 단, 모든 부서의 직원 수의 합은 1000000명 이하이며, 직원당 면담에 소요 되는 시간은 1분 이상 1000분 이하의 정수이다.

출력

모든 부서의 퇴근하는 데 걸리는 시간의 합의 최솟값을 분 단위로 출력한다.

Code

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
use std::io::{BufReader,BufRead,BufWriter,stdin,Write,stdout};
fn main(){
    let mut reader= BufReader::new(stdin().lock());
    let mut writer= BufWriter::new(stdout().lock());
    let mut input = String::new();
    reader.read_line(&mut input).unwrap();
    let mut v:Vec<usize>= Vec::new();
     let n= input.trim().parse().unwrap();
     for _ in 0..n{
         input.clear();
         reader.read_line(&mut input).unwrap();
         let t: Vec<usize> = input
            .split_whitespace()
            .map(|s| s.parse().unwrap())
            .collect();
             v.push(t.iter().skip(1).sum())
     }
     v.sort();
     let mut answer = 0;
     
     for i in 0..n {
         answer += (n - i) * v[i];

     }

     writeln!(writer,"{}",answer).unwrap();
     writer.flush().unwrap();
}