https://www.acmicpc.net/problem/7568
7568번: 덩치
우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x,y), (p,q)라고 할 때 x>p 그리고 y>q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56,177), (45,165) 라고 한다면 A의 덩치가 B보다 큰
www.acmicpc.net
[문제 풀이]
문제의 해결법은 브루트 포스였던 것 같습니다.
단순 브루트 포스를 이용하여 풀었습니다.
반복문을 이용하여 자신보다 덩치가 큰(몸무게와 키가 둘 다 큰) 사람의 개수를 찾을 때마다 증가시켜주는 식으로 문제를 풀었습니다.
이 코드의 핵심은
v[i].first < v[j].first && v[i].second < v[j].second
입니다.
[코드]
#include<iostream>
#include<vector>
int N;
vector<pair<int, int>> v;
int main() {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
int a, b;
scanf("%d %d", &a, &b);
v.push_back(make_pair(a, b));
}
for (int i = 0; i < N; i++) {
int count = 1;
for (int j = 0; j < N; j++) {
if (i == j)
continue;
if (v[i].first < v[j].first && v[i].second < v[j].second)
count++;
}
printf("%d ", count);
count = 1;
}
}
ps) Sorting을 하여서 순차적으로 등수를 매기는 방법으로 문제를 풀어 보았지만 틀렸습니다. 혹시 어떤 부분이 틀린 건지 아시는 분은 댓글 남겨주시면 감사하겠습니다.
#include<iostream>
#include<vector>
#include<tuple>
#include<algorithm>
using namespace std;
int N;
int grade[51];
vector<tuple<int, int, int>> person;
int main() {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
int a, b;
scanf("%d %d", &a, &b);
person.push_back(make_tuple(a, b, i));
}
sort(person.begin(), person.end(), greater<tuple<int,int, int>>());
int level = 1, count = 1;
for (int i = 0; i < person.size() - 1; i++) {
if (get<0>(person[i]) > get<0>(person[i + 1]) && get<1>(person[i]) > get<1>(person[i + 1])) {
grade[get<2>(person[i])] = level;
level += count;
count = 1;
if (i == person.size() - 2)
grade[get<2>(person[i + 1])] = level;
}
else {
grade[get<2>(person[i])] = level;
count++;
if (i == person.size() - 2)
grade[get<2>(person[i + 1])] = level;
}
}
for (int i = 0; i < N; i++)
printf("%d ", grade[i]);
return 0;
}
'algorithm > BOJ' 카테고리의 다른 글
백준 3190_뱀(C++) (0) | 2020.04.08 |
---|---|
백준 2748_피보나치 수 2(C++) (0) | 2020.04.03 |
백준 11729_하노이 탑 이동 순서(C++) (4) | 2020.04.01 |
백준 14888_연산자 끼워넣기(C++) (2) | 2020.03.28 |
백준 13458_시험감독(C++) (3) | 2020.03.27 |