풀이 보관함
[Softeer/C++] [인증평가(5차) 기출] 성적 평가 (시간 초과) 본문
🔗 문제
🖍 풀이
1000ms 안에 풀어야 하는데 시간 초과 때문에 못 풀었다.
나는 최대 1082ms로 시간 초과다.
진짜 진짜 조금만 더 줄이면 되는데 아쉬워서 일단 포스팅한다.......ㅠ
특정 점수를 초과하는 개수로 등수 표현
for(int i=0; i<3; ++i)
{
for(int j=0; j<N; ++j)
{
rank = 1;
total[j] += arr[i][j];
for(int k=0; k<N; ++k)
{
if(arr[i][j] < arr[i][k])
++rank;
}
std::cout << rank << ' ';
}
std::cout << '\\n';
}
정렬해서 등수 보는 방법
정렬을 하는 거라 시간이 많이 위 방법보다 많이 걸릴 줄 알았는데 은근히 별로 차이가 안 나서 놀랐다
copy = total;
std::sort(copy.begin(), copy.end(), std::greater<>()); // 정렬도 시간 걸리는뎁..
for(int j=0; j<N; ++j)
{
for(int k=0; k<N; ++k)
{
if(total[j] == copy[k])
{
std::cout << k+1 << ' ';
break;
}
}
}
💾 소스
그나마 제일 덜 틀린 소스
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
long long N = 0, rank = 1;
std::cin >> N;
std::vector<std::vector<long long>> arr(3, std::vector<long long>(N));
std::vector<long long> score(N, 0);
std::vector<long long> copy(N, 0);
std::vector<long long> total(N, 0);
for(int i=0; i<3; ++i)
{
for(int j=0; j<N; ++j)
{
std::cin >> score[j];
total[j] += score[j];
}
copy = score;
std::sort(copy.begin(), copy.end(), std::greater<>());
for(int j=0; j<N; ++j)
{
for(int k=0; k<N; ++k)
{
if(score[j] == copy[k])
{
std::cout << k+1 << ' ';
break;
}
}
}
std::cout << '\\n';
}
copy = total;
std::sort(copy.begin(), copy.end(), std::greater<>());
for(int j=0; j<N; ++j)
{
for(int k=0; k<N; ++k)
{
if(total[j] == copy[k])
{
std::cout << k+1 << ' ';
break;
}
}
}
return 0;
}