초기 네이버 기록/알고리즘(C)

백준 c++백준 7568 덩치 클래스 복습

뜨거운 개발자 2023. 1. 5. 00:57

이 문제는 분명 클래스를 쓰지 않고도 더 짧게 풀 수 있었다. 하지만 굳이 클래스를 사용해 본건 생성자에 대해서 복습이 필요했고 더 보기 깔끔한 코드를 만들어보기 위해서였다. 확실히 가독성과 코드 짤 때 머리속에 정리가 잘 되는 느낌이다.

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