[프로그래머스] 모의고사 - c++

삼식이·2025년 5월 17일
0

알고리즘

목록 보기
51/81

모의고사

met1, met2, met3에 수포자 3명의 찍기 패턴을 저장해놓는다.

문제에서 시험은 최대 10,000 문제로 구성되어있다고 하므로 answers의 길이는 최대 10,000이다.

따라서 answers와 수포자들의 답을 비교할 때 % 연산자를 사용해야 한다.

각 점수가 어떤 수포자의 점수인지 식별할 수 있게 scores에 pair로 저장하고 점수를 기준으로 내림차순 정렬한다.

그 후 scores 중 가장 높은 점수를 받은 사람을 모두 answers 배열에 추가 후, 오름차순으로 정렬하면 된다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    int num1 = 0, num2 = 0, num3 = 0;
    vector<int> met1 = {1, 2, 3, 4, 5};
    vector<int> met2 = {2, 1, 2, 3, 2, 4, 2, 5};
    vector<int> met3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    
    for(int i = 0; i < answers.size(); i++) {
        if (answers[i] == met1[i % met1.size()]) num1++;
        if (answers[i] == met2[i % met2.size()]) num2++;
        if (answers[i] == met3[i % met3.size()]) num3++;
    }
    
    vector<pair<int, int>> scores = {
        {num1, 1},
        {num2, 2},
        {num3, 3}
    };
    
    // 점수 기준 내림차순 정렬
    sort(scores.rbegin(), scores.rend());
    
    int max_score = scores[0].first;
    
    // 가장 높은 점수를 받은 사람 모두 answer에 추가
    for (auto& p : scores) {
        if (p.first == max_score) {
            answer.push_back(p.second);
        }
    }
    
    sort(answer.begin(), answer.end()); 
    return answer;
}

0개의 댓글