Решение 3-ей задачи easy с HH. Нахождение минимального, максимального и медианного возраста сотрудников.

This commit is contained in:
Leonid
2025-04-12 12:27:37 +03:00
parent 0e5fc7175a
commit acb617b460

View File

@@ -0,0 +1,58 @@
package com.algos.hh.easy;
import java.util.Arrays;
import java.util.List;
//Возраст сотрудников
// Вы работаете над модулем внутрикорпоративной системы учета данных сотрудников компании. Программа должна:
// 1. Найти сотрудника с минимальным возрастом;
// 2. Вычислить медианный возраст всех сотрудников;
// 3. Найти сотрудника с максимальным возрастом.
// Медиана — число, которое находится в середине этого набора, если его упорядочить по возрастанию. Если набор чисел четный, то берется среднее между двумя средними числами и округляется до целого.
// Формат ввода
// Одна строка — данные сотрудников. Данные включают имя, возраст и отдел, разделенные запятой, без пробелов. Информация о каждом сотруднике разделена через точку с запятой.
// Количество сотрудников — от 2 до 100.
// Формат вывода
// Одна строка содержит три целых числа, разделенные пробелом: минимальный возраст, медианный возраст и максимальный возраст.
// Пример 1
// Входные данные:
// Иван,28,Инженер;Олег,34,HR;Денис,45,Маркетинг;Анна,30,Инженер;Борис,24,HR
// Выходные данные:
// 24 30 45
// Пример 2
// Входные данные:
// Павел,28,Инженер;Елена,34,Маркетинг
// Выходные данные:
// 28 31 34
public class AgeProcessor {
public static void main(String[] args) {
String input = "Иван,28,Инженер;Олег,34,HR;Денис,45,Маркетинг;Анна,30,Инженер;Борис,24,HR";
String input2 = "Павел,28,Инженер;Елена,34,Маркетинг";
System.out.println(processEmployeeData(input));
System.out.println(processEmployeeData(input2));
}
public static String processEmployeeData(String input) {
String[] employees = input.split(";");
List<Integer> ages = Arrays.stream(employees)
.map(s -> s.split(","))
.filter(parts -> parts.length >= 2)
.map(e -> Integer.parseInt(e[1]))
.sorted()
.toList();
if (ages.isEmpty()) {
return "0 0 0";
}
int minAge = ages.get(0);
int maxAge = ages.get(ages.size() - 1);
int middleOfList = ages.size() / 2;
int medAge = ages.size() % 2 != 0 ? ages.get(middleOfList) :
Math.round((ages.get(middleOfList) + ages.get(middleOfList - 1)) / 2f);
return minAge + " " + medAge + " " + maxAge;
}
}