본문 바로가기

알고리즘 문제풀이

[알고리즘] 백준 7568번 "덩치" (C/C++) - Don 임베디드

문제요약:

 

A의 덩치가 (x1, y1), B의 덩치가 (x2,y2) 이고,

x1 > x2 그리고 y1 > y2 를 만족하는 경우

A는 B보다 "덩치가 크다" 라고 표현하기로 하자.

 

x1 > x2 는 만족하지만 y1 <= y2 인 경우,

또는

y1 > y2 는 만족하지만 x1 <= x2 인 경우에는

A와 B는 덩치를 비교할 수 없다.

이런 경우엔 A 와 B의 등수는 동률로 한다.

 

예를 들어,

A (55, 185)

B (58, 183)

C (88, 186)

세 명의 몸무게와 키가 주어졌을때 등수는

C가 1등, A는 2등, B도 2등이다.

 

N명의 사람의 몸무게 x, 키 y가 주어진다.

이 때, 주어진 모든 사람에 대하여

덩치 순으로 몇 등인지 출력하는 프로그램을 만들어보자.

 

 

제약:

 

시간 제한 1초, 메모리 제한 128MB

 2 <= N <= 50

10 <= x, y <= 200

 

 

입력:

 

첫 줄에는 사람 수 N이 주어진다.

이어지는 N개의 줄에는 각 사람의 몸무게와 키 x와 y가 공백을 두고 주어진다.

 

 

출력:

 

입력에서 주어진 사람의 덩치 등수를 구해서 그 순서대로 출력한다.

각 등수 사이는 공백으로 분리한다.

 

 

예제:

 

예제 1 입력. 예제 1 출력.
5
55 185
58 183
88 186
60 175
46 155
2 2 1 2 5

 

 

정답코드:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
 
#define MAX_PERSON_COUNT        (51)
 
using namespace std;
 
enum {
    // Index 표현을 위한 enum 선언
    X_Index = 0,
    Y_Index,
    Index_Count,
};
 
// 각 사람의 몸무게와 키를 저장할 2차원 배열.
int aanPerson[MAX_PERSON_COUNT][Index_Count];
 
int main()
{
    int N;
    
    // 사람 수 N 입력.
    scanf("%d"&N);
 
    for (int i = 1; i <= N; i++)
    {
        // i 번째 사람의 키와 몸무게를 입력 받음.
        scanf("%d %d"&aanPerson[i][X_Index], &aanPerson[i][Y_Index]);
    }
 
    for (int i = 1; i <= N; i++)
    {
        // i 번째 사람의 등수 초기화.
        int nTmpResult = 1;
 
        for (int j = 1; j <= N; j++)
        {
            // 모든 사람과 비교했을 때, 본인 보다 덩치가 큰 사람의 수를 계산.
            if ((aanPerson[j][X_Index] > aanPerson[i][X_Index]) && 
                (aanPerson[j][Y_Index] > aanPerson[i][Y_Index]))
            {
                nTmpResult++;
            }
        }
 
        // i 번째 사람의 등수 출력.
        printf("%d ", nTmpResult);
    }
 
    return 0;
}
cs

 

원본 링크: https://www.acmicpc.net/problem/7568