본문 바로가기

백준

[백준알고리즘]7568번 덩치 c++,python

반응형

덩치에 대한 문제이다.

이는 59.761%의 정답 비율을 가짐을 확인했다.

 

문제가 길어졌다.

 

요약해보자면, (몸무게, 키)를 통해 덩치를 결정짓는데

A의 몸무게와 키가 모두 커야 A의 덩치가 '더 크다'라고 한다.

만약 몸무게는 B가 크고, 키가 A가 크다면 덩치의 우열을 가릴 수 없다는 것이다.

이러한 경우에는 같은 등수를 준다(둘 다 2등이란 소리-1등이 따로 있는 경우)

 

입력은 공백을 통해 나타나짐을 확인할 수 있다.

출력은 공백문자로 분리되어야 하며, 등수 순서대로 출력한다.

 

예시를 보면 깊은 이해를 얻을 수 있다.

예제에서는 5를 먼저 입력함으로써 5명을 입력할 것임을 확인할 수 있다.

예를 들어 예제입력의 2명만 봐보자.

위의 '55 185', '58 183'을 본다고 할 때, 후자가 몸무게가 크고, 전자가 키가 크다.

둘다 큰 경우는 없기에 이 둘은 2 2로 같은 등수로 출력된다.

 

  • C++언어

처음엔 2차원 배열을 생각했다.

하지만 배열이 아닌 다른 방법을 찾았고, pair을 사용하게 되었다.

pair을 포함하는 utility를 import해준다.

이를 통해, 둘의 정보를 사용할 수 있으며, '.first'와 '.second'를 사용하여 풀 수 있다.

 

덩치를 비교해야 하기 때문에, 사람의 수를 입력 받는다.

그럼 입력받은 사람 수만큼 for문을 돌려 순서대로의 weight, height를 입력 받는다.

 

사람의 수만큼 for문을 돌리고 안에 for문을 한번 더 돌림으로써 덩치를 비교할 수 있다.

둘 다 커야 덩치가 크고 둘다 작으면 덩치가 작아지므로,

둘다 작아지는 경우, cnt를 하나씩 증가시켜준다.

그럼 순서대로 등수가 출력됨을 확인할 수 있다.

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

int main(){
    int num;
    int cnt=1;
    pair<int,int>arr[50];
    cin>>num;
    for(int i=0;i<num;i++)
        cin>>arr[i].first>>arr[i].second;
    for(int i=0;i<num;i++){
        for(int j=0;j<num;j++)
            if(arr[i].first<arr[j].first && arr[i].second<arr[j].second)
                cnt++;
        cout<<cnt<<' ';
        cnt=1;
    }
}

 

  • Python코드

파이선 코드를 통해 num을 입력받고,

정보를 담을 수 있는 공간을 만든다.

 

for문을 사용하여,

weight, height를 저장한다.

이는 map을 사용하고 split을 통해 띄어쓰기를 구분한다.

이러한 map을 people에 다 담는다.

 

그 다음 for문을 통해 각 사람마다 저장되어 있는 사람보다 덩치가 작은지 확인한다.

작은 경우, cnt를 하나 증가시킨다.

이처럼 등수를 출력한다.

num = int(input())

people = []

 

for _ in range(num):

    w, h = map(int, input().split())

    people.append((w,h))

   

for i in people:

    cnt = 1

    for j in people:

        if i[0] < j[0] and i[1] < j[1]:

                cnt += 1

    print(cnt, end = " ")

반응형