Baekjoon Online Judge
백준 7568번) 덩치
judy1467
2023. 1. 9. 00:45
본문의 코드보다 더 효율적인 코드가 분명 존재합니다.
참고만 해주시면 감사하겠습니다.
코드 지적은 언제나 환영입니다.
풀이
케이스 갯수를 입력받고 갯수만큼 몸무게와 키를 입력받는다.
입력받은 케이스를 서로 비교하여 (자신보다 더 큰 케이스 갯수+1)의 숫자를 부여한다.
단, 비교하기가 애매한 경우(ex 몸무게1 > 몸무게2, 키1 < 키2) 같은 숫자를 부여한다.
vector(가변배열)에 pair<순서, pair<몸무게, 키>>를 입력한다.
2중 for문을 이용하여 vector의 첫 주소부터 마지막 주소까지 각 주소마다 모든 주소의 값들과 비교하며 자신보다 덩치가 큰 케이스를 카운트한다.
만약 제일 큰 경우라면 카운트가 0 이기 때문에 pair의 first 자리에 0+1을 입력한다.
만약 두번 째로 큰 경우라면 카운트가 1이기 때문에 pair의 first 자리에 1+1을 입력한다.
코드
#include "iostream"
#include "utility"
#include "queue"
using namespace std;
vector<pair<int, pair<int, int>>> list;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n; // 케이스 수 입력
for(int i = 0 ; i < n ; i++){
int tmp1, tmp2;
cin >> tmp1 >> tmp2; // 몸무게, 키 입력
list.push_back(make_pair(0, make_pair(tmp1, tmp2)));
}
for(auto i = list.begin() ; i != list.end() ; i++){
int cnt = 0;
for(auto j = list.begin() ; j != list.end() ; j++){
if((*i).second.first < (*j).second.first){
if((*i).second.second < (*j).second.second){
cnt++; // 몸무게, 키 둘다 자신보다 크다면 카운트
}
}
}
(*i).first = cnt+1; // 카운트+1 저장
}
for(auto i = list.begin() ; i != list.end() ; i++){
cout << (*i).first << "\n";
}
return 0;
}