Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

풀이 보관함

[Softeer/C++] [인증평가(5차) 기출] 성적 평가 (시간 초과) 본문

problem solving

[Softeer/C++] [인증평가(5차) 기출] 성적 평가 (시간 초과)

viin 2023. 1. 29. 19:41

🔗 문제

Softeer

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

 

🖍 풀이

 

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;
}