문제요약:
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 |
'알고리즘 문제풀이' 카테고리의 다른 글
[알고리즘] LeetCode 21번 "Merge Two Sorted Lists" (C/C++) - Don 임베디드 (0) | 2022.09.26 |
---|---|
[알고리즘] LeetCode 543번 "Diameter of Binary Tree" (C/C++) - Don 임베디드 (0) | 2022.09.21 |
[알고리즘] 백준 1181번 "단어 정렬" (C/C++) - Don 임베디드 (14) | 2022.04.21 |
[알고리즘] 백준 18258번 "큐 2" (C/C++) - Don 임베디드 (11) | 2022.04.19 |
[알고리즘] 백준 11651번 "좌표 정렬하기 2" (C/C++) - Don 임베디드 (32) | 2022.04.17 |