[Programmers/C++] 모의고사

GamzaTori·2024년 12월 19일

Algorithm

목록 보기
110/133

시간 복잡도

  • N이 최대 10,000 이므로 시간은 충분합니다.

문제 접근법

  • 각 수포자가 문제를 찍는 1 사이클을 배열로 가지고 있습니다.
  • 문제의 정답을 순회하며 각 수포자가 찍은 정답과 비교하여 정답 횟수를 배열에 업데이트 합니다.
  • 정답의 최댓값을 구한 후 같은 정답을 가지고 있는 수포자를 정답 배열에 추가합니다.

코드

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

using namespace std;

static int p1[] = {1,2,3,4,5};
static int p2[] = {2,1,2,3,2,4,2,5};
static int p3[] = {3,3,1,1,2,2,4,4,5,5};
static int result[] = {0,0,0};

vector<int> solution(vector<int> answers) {
    vector<int> answer;

    for(int i=0; i<answers.size(); i++)
    {
        int idx1 = i%5;
        int idx2 = i%8;
        int idx3 = i%10;
        if(answers[i]==p1[idx1])
            result[0]++;
        
        if(answers[i]==p2[idx2])
            result[1]++;
        
        if(answers[i]==p3[idx3])
            result[2]++;
    }
    
    int max=0;
    for(int i=0; i<3; i++)
    {
        if(result[i]>max)
            max=result[i];
    }
    
    for(int i=0; i<3; i++)
    {
        if(result[i]==max)
            answer.push_back(i+1);
    }

    
    return answer;
}
profile
게임 개발 공부중입니다.

0개의 댓글