알고리즘/백준 단계별로 풀기 (12.26 ~ 12.31)

브루트포스 - 백준 7568번 덩치

잡담연구소 2020. 12. 26. 06:53

www.acmicpc.net/problem/7568

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A 와 B의 덩

www.acmicpc.net

IDEA

1 : 1 로 비교하며 자신보다 덩치가 큰 사람이 몇 명인지 구해야 자신의 등수가 나오는 문제라고 생각을 했다.

등수는 자신보다 큰 사람에 의해 결정되기 때문에 1, 2, 2, 2, 5 등과 같이 3,4등이 안나올 수 있다. 

그래서 정렬은 안되고 1:1 즉 $N^{2}$번 계산해야된다. 전체 사람의 수가 50밖에 되지 않아 최악의 경우에도 2500번 연산 밖에 안돼 그냥 이중 FOR문을 사용했다. 

 

1. 1부터 N까지 모든 사람과 자신의 덩치를 비교한다. 

- 자신의 인덱스와 같은 것이 나오면 PASS

2. 키,몸무게 둘 다 크다면 grade (등수) 를 하나 더해준다.

- 단, 이때 자신보다 큰 사람이 없는 경우 1등이기때문에 grade를 1로 초기화해준다. 

 

코드 

pair 벡터를 사용하여 키,몸무게 둘 다 넣어주었다.

#include <iostream>
#include <vector>
using namespace std;

int main() {
	vector<pair<int,int>>info;
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		int weight, height;
		scanf("%d %d", &weight, &height);
		info.push_back({ weight,height });
	}
	for (int i = 0; i < n; i++) {
		int grade = 1;
		for (int j = 0; j < n; j++) {
			if (i == j) continue;
			if (info[j].first > info[i].first && info[j].second > info[i].second) grade++;
		}
		printf("%d ", grade);
	}
}