PS (C, C++)

[백준/C & C++] 7568 덩치

최연재 2022. 9. 3. 03:34

https://www.acmicpc.net/problem/7568

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩

www.acmicpc.net

코드 (C)

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int n;
	scanf("%d", &n);
	int* h = (int*)malloc(sizeof(int) * n);
	int* w = (int*)malloc(sizeof(int) * n);
	int* result = (int*)malloc(sizeof(int) * n);

	for (int i = 0; i < n; i++)
	{
		scanf("%d %d", &w[i], &h[i]);
		result[i] = 1;
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (i == j) continue;
			else
			{
				if ((w[i] < w[j]) && (h[i] < h[j])) result[i]++;
			}
		}
		printf("%d ", result[i]);
	}

	free(h);
	free(w);
	free(result);
	return 0;
}

코드 (C++)

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

int main()
{
	int n;
	cin >> n;
	int* h = new int[n];
	int* w = new int[n];
	int* result = new int[n];

	for (int i = 0; i < n; i++) 
    {
        cin >> w[i] >> h[i];
        result[i] = 1;
    }

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (i == j) continue;
			if ((w[i] < w[j]) && (h[i] < h[j])) result[i]++;
		}
        cout << result[i] << " ";
	}

	delete[]h;
	delete[]w;
	delete[]result;
	return 0;
}

코드설명

전체 사람의 수인 n을 입력받고 키, 몸무게, 결과를 저장할 배열을 동적배열로 만든다. 

반복문을 돌면서 몸무게와 키를 입력받고 결과 배열의 값을 모두 1로 초기화한다. 

 

다시 반복문을 도는데, 이때 하나의 값에 대해 자신을 제외한 모든 값을 비교한다.

집단에서 덩치 등수는 자신보다 더 큰 덩치인 사람의 수로 정해지므로, 자신보다 큰 덩치(키와 몸무게 모두 자신보다 커야 함)를 가진 사람을 만날 때마다 result[i]를 1씩 더한다. 

 

결과를 출력하고, 동적배열을 해제한다.  

느낀 점

처음에는 다른 방식으로 풀려고 했다. 배열의 모든 값을 n으로 초기화하고, 자신보다 작은 사람을 만날 때마다 result[i]를 뺐다. 그러면 문제의 예제에 대해서는 4 4 1 4 5의 결과가 나온다. 그후 동일한 값을 가진 인물을 세서 (이 경우에는 3) n에서 빼서 결과를 출력할 생각이었다. 그런데 결과가 틀리게 나오는 경우도 있어서 방향을 수정해서 풀었다. 

 

'PS (C, C++)' 카테고리의 다른 글

[백준/C & C++] 2920 음계  (0) 2022.09.04
[백준/C & C++] 1297 TV 크기  (0) 2022.09.03
[백준/C & C++ ] 9020 골드바흐의 추측  (0) 2022.08.29
[백준/C & C++] 11047 동전 0  (0) 2022.08.29
[백준/C & C++] 4948 베르트랑 공준  (0) 2022.08.29