[C++] 백준 7568 덩치 (+Python)
반응형
https://www.acmicpc.net/problem/7568
1. 서론
브루트 포스 문제. 어렵지 않고 간단한 문제.
2. 문제 풀이
어떤 사람의 키와 몸무게가 있다. 그걸 다른 사람의 키와 몸무게와 비교했을 때 키, 몸무게가 둘 다 큰 경우에만 덩치가 크다라고 한다.
키는 크고 몸무게가 작은 경우는 여기에 포함하지 않는다. 이렇게 덩치 비교를 하면서 덩치의 등수를 정하려고 한다.
덩치 등수는 전체 인원 중에 나보다 덩치가 큰 사람의 수를 count 해서 그 수를 등수로 한다.
이 문제의 경우에는 덩치를 절대적인 숫자로 정렬할 수 없기 때문에 사람 한 명 당 나머지 인원과 전부 비교하면서 count를 해야 한다.
그렇게 때문에 브루트 포스 문제이다. (전체를 전부 다 봐줘야 하기 때문)
3. 코드 설명
#include <vector>
#include <iostream>
using namespace std;
int main()
{
int n, i, j, x, y;
vector<pair<int, int> > v;
int c[50];
cin >> n;
for (i = 0; i < n; i++)
{
cin >> x >> y;
v.push_back(make_pair(x, y));
}
for (i = 0; i < n; i++)
c[i] = 1;
for (i = 0; i < n; i++)
for(j = 0; j < n; j++)
if (v[i].first < v[j].first && v[i].second < v[j].second)
c[i]++;
for (i = 0; i < n; i++)
cout << c[i] << " ";
}
pair에 키와 몸무게를 저장해준다. 그리고 배열 c를 1로 초기화해준다. 등수이기 때문에 1이 default 값이다. (0등은 없으므로)
그리고 배열을 돌면서 한 명씩 각각 덩치를 비교한다. <로 처리했기 때문에 i = j 인 경우는 자동 필터링된다.
오로지 덩치가 작은 경우만 count 된다. (작을수록 등수가 커지기 때문)
그리고 count 한 값을 담은 배열 c를 출력해준다.
+) Python 코드 추가
n = int(input())
arr = [] * n
for i in range(n) :
x, y = map(int, input().split())
arr.append([x, y])
c = [] * 50
for i in range(n):
c.append(1)
for i in range(n):
for j in range(n):
if(arr[i][0] < arr[j][0] and arr[i][1] < arr[j][1]):
c[i]+= 1
for i in range(n):
print(c[i])
문제가 쉬워서 파이썬 연습 해볼겸 한 번 작성해봤다!!
반응형
'Algorithm' 카테고리의 다른 글
[C++] 백준 16956 늑대와 양 (0) | 2021.07.10 |
---|---|
[C++] 백준 17413 단어 뒤집기 2 (0) | 2021.07.06 |
[C++] 백준 2231 분해합 (0) | 2021.06.04 |
[C++] 백준 2480 주사위 세개, 2484 주사위 네개 (0) | 2021.05.10 |
[C++] 백준 13458 시험 감독 (0) | 2021.04.21 |