728x90
반응형

정리

수포자 3명이 있고, 3명이 각각 정해진 규칙에 맞춰 답을 작성해서 제출한다.
1번부터 답이 정해져있기 때문에 규칙적으로 반복되는 정답의 갯수를 이용해 정답을 체크해준다.
정답의 갯수가 정해져 있어 그 수만큼 반복되기 때문에 나머지를 구해서 맞은 정답의 갯수를 구해준다.
정답일 때, 카운트를 세어주고 문제에서 가장 많은 정답을 맟춘 학생을 출력해야하기 때문에
카운트가 많은 수포자를 answer 에 넣어준다.

따라서, 이 문제는 이렇게 풀어보았다.

1) 수포자가 정해진 답을 계속해서 반복한다는 점. 그리고 수포자는 어떤 문제가 나와도 이 정답만 제출한다.
2) 정답이 반복되기 때문에 반복되는 정답의 갯수를 구한다.
3) 반복되는 정답의 갯수가 5개이고, 7번 문제라면 7를 5로 나눈 나머지인 2 번째의 답과 정답을 비교한다.
4) 위의 과정을 통해 정답의 갯수를 구하고 수포자 3명 중 최댓값을 구해 답에 입력해준다.

되게 길게 적었지만 간단하게 말하자면 나머지를 이용해서 쉽게 풀 수 있는 문제였다.

소스 코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> ans1 {1, 2, 3, 4, 5};
    vector<int> ans2 {2, 1, 2, 3, 2, 4, 2, 5};
    vector<int> ans3 {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    
    int cnt1=0, cnt2=0, cnt3=0;
    
    for(int i=0; i<answers.size(); i++){
        int n1 = i%5;
        int n2 = i%8;
        int n3 = i%10;
        
        if(ans1[n1] == answers[i]) cnt1++;
        if(ans2[n2] == answers[i]) cnt2++;
        if(ans3[n3] == answers[i]) cnt3++; 
    }
    
    int maxcount = max(cnt1, max(cnt2, cnt3));
    
    if(maxcount == cnt1) answer.push_back(1);
    if(maxcount == cnt2) answer.push_back(2);
    if(maxcount == cnt3) answer.push_back(3);
    
    return answer;
}
728x90
반응형
복사했습니다!