ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [1일 1백준 : 4344번] 평균은 넘겠지
    Programming/백준 2021. 1. 17. 16:23

    첫번째 꺼는 이중 포인터로 Dynamic Array를 만들어서 결과를 도출시켰고

    두번째 꺼는 Mordern C++ 형태의 Dynamic Array인 std::vector를 사용해서 결과를 냈다. 

    둘다 결과는 같으나 첫번째 꺼는 백준에 제출했을 때 컴파일 에러가 떳다.

    알아봤더니 _msize함수 쪽에서 나왔는데, _mize는 힙에 할당된 메모리 사이즈를 가져와주는 유용한 함수이나, GNU 컴파일러에서는 지원하지 못하고 VC++에서만 지원을 해주다 보니깐 백준 컴파일러에서는 지원을 해주지 않은 것 같았다.

    그래서 두번째 방식으로 제출을 하게 되었다.

    - 첫번째 방식 (double pointer)

    #include <iostream>
    
    
    int main(void)
    {
    	std::cin.tie(NULL);
    	std::cout.tie(NULL);
    	std::ios::sync_with_stdio(false);
    
    	std::cout.setf(std::ios::fixed);
    	std::cout.precision(3);
    
    	short N = 0;
    
    	std::cin >> N;
    
    	short** index = new short* [N];
    
    	for (short i = 0, classNum = 0; i < N; i++)
    	{
    		std::cin >> classNum;
    		index[i] = new short[classNum];
    		for (short j = 0; j < classNum; j++)
    		{
    			std::cin >> index[i][j];
    		}
    	}
    	float sum = 0;
    	float average = 0;
    	int overStudent = 0;
    	for (short i = 0; i < N; i++)
    	{
    		sum = 0;
    		overStudent = 0;
    		int size = _msize(index[i]) / sizeof(short);
    		
    		for (short j = 0; j < size; j++)
    		{
    			sum += index[i][j];
    		}
    		average = sum / size;
    
    
    		for (short j = 0; j < size; j++)
    		{
    			if (index[i][j] > average)
    			{
    				overStudent++;
    			}
    		}
    
    		float percent = ((float)overStudent / size) * 100;
    		std::cout << percent << "%" << std::endl;
    	}
    
    
    	for (short i = 0; i < N; i++)
    		delete[] index[i];
    
    	delete[] index;
    	return 0;
    }

     

     

     

     

     

    - 두번째 방식 (double pointer)

    #include <iostream>
    #include <vector>
    
    int main(void)
    {
    	std::vector<std::vector<short>> index;
    	
    	std::cin.tie(NULL);
    	std::cout.tie(NULL);
    	std::ios::sync_with_stdio(false);
    
    	std::cout.setf(std::ios::fixed);
    	std::cout.precision(3);
    
    	short N = 0;
    
    	std::cin >> N;
    	index.reserve(N);
    
    	for (short i = 0, classNum = 0; i < N; i++)
    	{
    		std::cin >> classNum;
    
    		std::vector<short> vec;
    		vec.reserve(classNum);
    		for (short j = 0; j < classNum; j++)
    		{
    			short num;
    			std::cin >> num;
    			vec.emplace_back(num);
    		}
    		index.emplace_back(vec);
    	}
    	float sum = 0;
    	float average = 0;
    	int overStudent = 0;
    	for (short i = 0; i < N; i++)
    	{
    		sum = 0;
    		overStudent = 0;
    		int size = index[i].size();
    
    		for (short j = 0; j < size; j++)
    		{
    			sum += index[i][j];
    		}
    		average = sum / size;
    
    
    		for (short j = 0; j < size; j++)
    		{
    			if (index[i][j] > average)
    			{
    				overStudent++;
    			}
    		}
    
    		float percent = ((float)overStudent / size) * 100;
    		std::cout << percent << "%" << std::endl;
    	}
    	return 0;
    }

    4344번: 평균은 넘겠지 (acmicpc.net)

     

    4344번: 평균은 넘겠지

    대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

    www.acmicpc.net

     

Designed by Tistory.