-
[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번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
'Programming > 백준' 카테고리의 다른 글
[1일 1백준 : 4673번] 셀프 넘버 (0) 2021.01.19 [1일 1백준 : 15596번] 정수 N개의 합 (0) 2021.01.18 [1일 1백준 : 8958번] OX퀴즈 (0) 2021.01.17 [1일 1백준 : 1546번] 평균 (0) 2021.01.17 [1일 1백준 : 3052번] 나머지 (0) 2021.01.17