이 문제는 분명 클래스를 쓰지 않고도 더 짧게 풀 수 있었다. 하지만 굳이 클래스를 사용해 본건 생성자에 대해서 복습이 필요했고 더 보기 깔끔한 코드를 만들어보기 위해서였다. 확실히 가독성과 코드 짤 때 머리속에 정리가 잘 되는 느낌이다.
calloc 함수를 사용해봤는데 malloc과 달리 인자를 넣는 방식이 살짝 달랐다.
void *malloc(size_t size);
void *calloc(size_t num, size_t size);
이렇게 돼있어서 처음에 멀록처럼 사용했다가 이렇게 바꾸었다.
#include<iostream>
#include<stdlib.h>
using namespace std;
class human
{
private:
int kg;
int len;
public :
human(int kg, int len): kg(kg),len(len){}
human() : kg(0), len(0) { }
int is_he_big(human & he)//인자로 온 값이 더 크다면 리턴 0 본체가 더 크다면 리턴 1
{
if (he.rlen() > len && he.rkg() > kg)
return (1);
return (0);
}
void insert(int ilen, int ikg)
{
len = ilen;
kg = ikg;
}
int rlen(){ return (len);}
int rkg(){ return (kg); }
};
int main()
{
int people_num, tlen,tkg;
cin >> people_num;
human * hu =new human[people_num];
for(int i = 0; i < people_num; i++)
{
cin >> tlen >> tkg;
hu[i].insert(tlen,tkg);
}
int *rank = (int *)calloc(people_num , sizeof(int));
for (int i = 0; i < people_num; i++)
{
for (int j =0; j < people_num; j++)
{
if(hu[i].is_he_big(hu[j]))
rank[i]++;//자기보다 큰 사람 숫자를 적어놓는다.
}
}
int *real_rank = (int *)calloc(people_num , sizeof(int));
int count =1 ;
for (int i = 0; i < people_num; i++)
{
for (int j = 0; j < people_num; j++)
{
if (rank[j] == i)
{
real_rank[j] = count;
}
}
count++;
}
for (int i = 0; i < people_num; i++)
cout << real_rank[i] << " ";
delete []hu;
free(rank);
free(real_rank);
}
이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.
728x90
'알고리즘 기초시절' 카테고리의 다른 글
백준 c++백준 11866번 요세푸스 문제 (0) | 2023.01.05 |
---|---|
백준 c++1654번 랜선 자르기 문제 (0) | 2023.01.05 |
백준 c++1165번 좌표 정렬하기 2(sort 함수 응용) (0) | 2023.01.05 |
백준 c++백준 1620번 포켓몬마스터 이다솜 (0) | 2023.01.05 |
백준 (C언어)백준 1157번 단어 공부 (0) | 2023.01.05 |