[C++] 백준 7568 덩치 (+Python)
2021. 6. 4.
반응형

https://www.acmicpc.net/problem/7568

 

7568번: 덩치

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

www.acmicpc.net

 

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])

 

문제가 쉬워서 파이썬 연습 해볼겸 한 번 작성해봤다!!

 

 

 

 

반응형
myoskin