Used In: SRM 208
Used As: Division I Level One
Problem Statement
A group of people stand before you arranged in rows and columns. Looking from above, they form an R by C rectangle of people. You will be given a String[] people containing the height of each person. Elements of people correspond to rows in the rectangle. Each element contains a space-delimited list of integers representing the heights of the people in that row. Your job is to return 2 specific heights in a int[]. The first is computed by finding the shortest person in each row, and then finding the tallest person among them (the "tallest-of-the-shortest"). The second is computed by finding the tallest person in each column, and then finding the shortest person among them (the "shortest-of-the-tallest").
Definition
Class: TallPeople
Method: getPeople
Parameters: String[]
Returns: int[]
Method signature: int[] getPeople(String[] people)
(be sure your method is public)
Constraints
- people will contain between 2 and 50 elements inclusive.
- Each element of people will contain between 3 and 50 characters inclusive.
- Each element of people will be a single space-delimited list of positive integers such that:
- Each positive integer is between 1 and 1000 inclusive with no extra leading zeros.
- Each element contains the same number of integers.
- Each element contains at least 2 positive integers.
- Each element does not contain leading or trailing whitespace.
Examples
{"9 2 3",
"4 8 7"} Returns: { 4, 7 }
The heights 2 and 4 are the shortest from the rows, so 4 is the taller of the two. The heights 9, 8, and 7 are the tallest from the columns, so 7 is the shortest of the 3.{"1 2",
"4 5", "3 6"} Returns: { 4, 4 }{"1 1",
"1 1"} Returns: { 1, 1 }
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
class TallPeople {
public:
vector<int> getPeople(vector<string> people) {
vector<vector<int> > grid(people.size());
for (int i = 0; i < people.size(); ++i) {
istringstream iss(people[i]);
int n;
while (iss >> n) {
grid[i].push_back(n);
}
}
int tos = 0;
for (int i = 0; i < grid.size(); ++i) {
int shortInRow = grid[i][0];
for (int j = 1; j < grid[i].size(); ++j) {
if (grid[i][j] < shortInRow) {
shortInRow = grid[i][j];
}
}
if (shortInRow > tos) {
tos = shortInRow;
}
}
int sot = 10000;
for (int i = 0; i < grid[0].size(); ++i) {
int tallestInColumn = grid[0][i];
for (int j = 1; j < grid.size(); ++j) {
if (grid[j][i] > tallestInColumn) {
tallestInColumn = grid[j][i];
}
}
if (tallestInColumn < sot) {
sot = tallestInColumn;
}
}
vector<int> ans(2);
ans[0] = tos, ans[1] = sot;
return ans;
}
};