어떤 사람의 몸무게가 x kg, 키가 y cm => 이 사람의 덩치는 (x, y)
두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때
x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다.
어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다.
🚨서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼 때 C와 D는 누구도 상대방보다 더 크다고 말할 수 없다.
N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 "큰 덩치"의 사람의 수로 정해진다. 만일 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k+1이 된다.
🚨이렇게 등수를 결정하면 같은 덩치 등수를 가진 사람은 여러 명도 가능하다.
키와 몸무게를 한꺼번에 다루기 위해서 변수를 어떻게 정할까 정도? 고민했다. int형과 배열을 적절히 사용해도 상관은 없겠지만 더 짧은 코드에 효율성 있게 작성하고 싶어서 자료형 Sample을 새로 지정을 해서 거기에 키와 몸무게를 기록할 수 있도록 하고 배열을 만들어 정보를 기입했다. 정보를 기입한 후에는 우선 키를 비교하고 만약 키가 본인보다 크면서 몸무게도 큰 사람이 있을 경우 Count를 + 해주는 것으로 본인의 순위를 측정할 수 있게 하였다.
(블로그에 정리하면서 깨닫게 된 점은 애초에 if문을 2개 사용하지말고 &&를 이용해서 두 개의 조건을 통합할 걸 그랬다!!)
덩치 문제를 포함해서 현재까지 푼 실버 문제는 3개!
브론즈 문제를 풀면서도 조금씩 난항을 겪어서 사실 실버 문제를 도전하기에 조금 겁을 먹고 들어간 부분도 있었지만 생각보다 막 너무 어렵지는 않은 것 같다! 1,2월 안에 골드 문제도 풀어보고 싶다!!
🧾 전체 코드
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Sample
{
int Weight;
int height;
}Sample;
int main()
{
int N;
scanf("%d", &N);
int Count = 0;
Sample* Ary = (Sample*)malloc(sizeof(Sample) * N);
for (int i = 0; i < N; i++)
{
scanf("%d %d", &(Ary[i].height), &(Ary[i].Weight));
}
for (int i = 0; i < N; i++)
{
Count = 0;
for (int j = 0; j < N; j++)
{
if ((Ary[i].height) < (Ary[j].height))
{
if ((Ary[i].Weight) < (Ary[j].Weight))
{
Count = Count + 1;
}
}
}
printf("%d ", Count + 1);
}
}