[백준] 7568번 : 덩치/ C언어

Boknami·2022년 1월 17일
0

백준문제풀이

목록 보기
3/45

📑문제


어떤 사람의 몸무게가 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);
	}
}

0개의 댓글