일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- datascience
- 중앙갑
- classification
- 백준
- 스택
- 7569번
- ML
- 그리디
- Queue
- c++
- cs231n
- BFS
- 정렬
- 큐
- AA test
- 알고리즘
- Stack
- Game Data Analysis
- Deeplearning
- DP
- Machine learning
- 딥러닝
- Anti Cheat
- 자료구조
- anomaly detection
- Python
- p-value
- 구현
- 통계
- Journal Review
- Today
- Total
Software Hyena::
[백준 11292번] - 키 큰 사람 / C++ 본문
11292번: 키 큰 사람
민우는 학창시절 승부욕이 강해서 달리기를 할 때에도 누가 가장 빠른지를 중요하게 생각하고, 시험을 볼 때에도 누가 가장 성적이 높은지를 중요하게 생각한다. 이번에 반에서 키를 측정하였
www.acmicpc.net
문제
민우는 학창시절 승부욕이 강해서 달리기를 할 때에도 누가 가장 빠른지를 중요하게 생각하고, 시험을 볼 때에도 누가 가장 성적이 높은지를 중요하게 생각한다. 이번에 반에서 키를 측정하였는데, 민우는 마찬가지로 누구의 키가 가장 큰지 궁금해한다. 민우를 도와 가장 키가 큰 사람을 찾아보자.
입력
입력은 여러개의 테스트케이스로 구성되어있다. 각 테스트케이스는 첫 번째 줄에 학생의 수 N (0 < N ≤ 50)이 주어지고, 이어서 N개의 줄에 각 학생의 이름과 키가 공백으로 구별되어 주어진다. 학생의 이름은 알파벳 대/소문자로만 이루어져 있고, 길이는 10을 넘지 않는다. 학생의 키는 소숫점 이하 2자리까지 주어진다. N이 0으로 주어지는 경우 프로그램을 종료한다.
출력
각 테스트케이스에 대해, 가장 키가 큰 학생의 이름을 한 줄에 출력한다. 같은 키의 사람이 여러명 일 경우 모두 출력해야 하며, 순서는 입력으로 들어온 순서를 유지해야 한다.
--------------------------------------------------------------------------------------------------------
풀이
<C++>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool Descending(pair<string, float> a, pair<string, float> b) {
return a.second > b.second;
}
int main() {
while (true) {
int N;
cin >> N;
if (N == 0) {
break;
}
vector<pair<string, float>> v;
string name;
float height;
for (int i = 0; i < N; ++i) {
cin >> name >> height;
v.push_back({ name, height });
}
stable_sort(v.begin(), v.end(), Descending);
for (int i = 0; i < N; ++i) {
if (v[i].second == v[0].second) {
cout << v[i].first << ' ';
}
}
cout << '\n';
}
return 0;
}
이 또한, 전형적인 정렬문제이다. 다만, 키가 같은경우, 입력받은 순서를 유지해야 하므로 stable_sort를 이용하는 것이 핵심이다.
1. N을 입력받는다. ( 0인경우, 반복문을 탈출하고, 프로그램을 종료함)
2. 벡터에 키와 이름들을 입력받아 넣는다.
3. 내림차순으로 stable_sort를 진행한다.
4. 정렬된 벡터의 최댓값과 다음 벡터의 값이 같은경우, 이름을 더 출력한다.
5. 출력이 모두 끝나면 개행문자를 출력하고, 다시 N을 입력받기를 반복한다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준 3986번] - 좋은 단어 / C++ (stack) (0) | 2021.03.05 |
---|---|
[백준 11916번] -볼질 / C++ (Class로 구현해보기) (0) | 2021.02.26 |
[백준 1422번] - 숫자의 신 / C++ (0) | 2021.02.24 |
[백준 11651번] - 좌표 정렬하기 2 / C++ (0) | 2021.02.24 |
[백준 3060번] - 욕심쟁이 돼지 / C++ (0) | 2021.02.23 |