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
반응형
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] Level 1. 크레인 인형뽑기 게임 (C++) (0) | 2021.03.22 |
---|---|
[Programmers] Level 2. 위장 (C++) (0) | 2019.08.31 |
[Programmers] Level 2. 스킬트리 (2018 윈터코딩 / C++) (0) | 2019.08.12 |
[Programmers] Level 1. 체육복 (C++) (0) | 2019.07.26 |
[Programmers] Level 1. 소수의 합 (C++) (0) | 2019.07.25 |