프로그래머스 완전탐색 모의고사

김동현·2022년 6월 20일
0
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> answers)
{
    // 1. 각 사람마다 몇 문제씩 맞췄는지 확인한다.
    // 모든 문제의 답을 순회하면서 각 사람마다 횟수를 센다.

    int counts[3] = { 0 };

    // 룩업테이블

    static const int solutions[3][10] = {
        { 1, 2, 3, 4 ,5 },
        { 2, 1, 2, 3, 2, 4, 2, 5 },
        { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }
    };

    static const int patternSize[3] = { 5, 8, 10 };

    size_t size = answers.size();

    for (int i = 0; i < size; ++i)
    {
        int currentAnswer = answers[i];

        if (currentAnswer == solutions[0][i % patternSize[0]])
        {
            ++counts[0];
        }

        if (currentAnswer == solutions[1][i % patternSize[1]])
        {
            ++counts[1];
        }

        if (currentAnswer == solutions[2][i % patternSize[2]])
        {
            ++counts[2];
        }
    }



    // 2. 가장 많이 맞춘 사람을 확인한다.
    // 2-1. 최대값을 저장한다.

    int maxCount = 0;

    for (int i = 0; i < 3; ++i)
    {
        if (maxCount < counts[i])
        {
            maxCount = counts[i];
        }
    }

    // 2-2. 최댓값과 같은지 비교한다.
    vector<int> answer;

    for (int i = 0; i < 3; ++i)
    {
        if (maxCount == counts[i])
        {
            answer.push_back(i + 1);
        }
    }
    // 2-3. 같다면 ? answer에 삽입한다.

    // 3. 여러 명이라면 오름차순으로 정렬한다.
    sort(answer.begin(), answer.end());

    return answer;
}
profile
해보자요

0개의 댓글