승코딩당당당

[C++] 백준 7568: 덩치 본문

PS/BOJ

[C++] 백준 7568: 덩치

승코딩당당당 2026. 1. 15. 15:01

문제

[C++] 백준 7568: 덩치 SILVER 5
https://www.acmicpc.net/problem/7568

 


 

접근 방법

이 문제는 사람들의 몸무게와 키가 주어졌을 때, 각 사람의 덩치 등수를 구하는 문제이다.

 

등수는 단순히 한 가지 기준으로 정렬해서 매길 수 있는 것이 아니라,

어떤 사람 A가 사람 B보다 몸무게도 크고 키도 크면 A가 B보다 덩치가 크다고 판단한다.

즉, 두 조건을 모두 만족해야 비교가 성립한다.

 

처음에는 정렬로 풀려고 했지만, 이 방식은 한 기준으로만 줄을 세우게 되어 “둘 다 큰 경우에만 등수가 밀린다”는 조건을 정확히 반영하지 못해 틀렸다..

그래서 모든 사람을 서로 비교하는 브루트포스(완전탐색) 방식으로 해결했다.

 

각 사람 i에 대해, 다른 사람 j가 i보다 몸무게도 크고 키도 크다면 i의 등수는 1씩 밀리므로
rank를 증가시키는 방식이다.

 

구현 시 주의할 점

  • 정렬로 해결하려고 하면 한쪽 기준만 반영되는 경우가 많아 오답이 나기 쉽고, 이 문제는 n ≤ 50이라 완전탐색 O(n^2)로도 충분히 통과한다.
  • 등수는 기본이 1등부터 시작하므로 rank = 1로 초기화한다.

 


 

코드

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

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n = 0;
	cin >> n;

	vector<pair<int, int>> vect(n);
	for (int i = 0; i < n; i++)
		cin >> vect[i].first >> vect[i].second;

	for (int i = 0; i < n; i++)
	{
		int rank = 1;
		for (int j = 0; j < n; j++)
		{
			if ((vect[i].first < vect[j].first) && (vect[i].second < vect[j].second))
				rank++;
		}
		cout << rank << ' ';
	}

	return 0;
}

'PS > BOJ' 카테고리의 다른 글

[C++] 백준 2343: 기타 레슨  (0) 2026.01.26
[C++] 백준 1920: 수 찾기  (1) 2026.01.25
[C++] 백준 4796: 캠핑  (1) 2026.01.14
[C++] 백준 1931: 회의실 배정  (0) 2026.01.14
[C++] 백준 2468: 안전 영역  (1) 2026.01.14