[PROGRAMMERS] 모의고사(Level1)
모의고사(Level1)
-
문제 링크: 코딩테스트 연습 > 완전탐색 > 모의고사
-
문제 이해
- 1번 수포자, 2번 수포자, 3번 수포자 모두 같은 패턴을 반복하며 찍습니다.
- 5지선다의 답안지에서 각 수포자가 찍어서 맞은 개수를 세고, 가장 높은 점수의
사람들을 answer에 넣습니다.
-
알고리즘 구현
- 1번 수포자는 5문제마다, 2번 수포자는 8문제마다, 3번 수포자는 10문제마다 같은
패턴을 반복합니다. (인덱스가 0~4, 0~7, 0~9 범위 내에 있음을 알 수 있습니다.)
- 어떤 패턴으로 찍는지 각 학생에 대한 벡터를 만듭니다.
- answers의 모든 인덱스의 값을 비교하며 각 학생이 맞춘 문제를 기록합니다.
1을 만족시키기 위해, 이를 위해 나머지 연산을 사용하며 비교합니다.
-
알고리즘
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> stdA{1, 2, 3, 4, 5};
vector<int> stdB{2, 1, 2, 3, 2, 4, 2, 5};
vector<int> stdC{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int idxA = 0, idxB = 0, idxC = 0;
int cntA = 0, cntB = 0, cntC = 0;
for (int i = 0; i < answers.size(); ++i) {
if (stdA[idxA % 5] == answers[i]) ++cntA;
if (stdB[idxB % 8] == answers[i]) ++cntB;
if (stdC[idxC % 10] == answers[i]) ++cntC;
++idxA;
++idxB;
++idxC;
}
int maxCnt = max(cntA, max(cntB, cntC));
if (cntA == maxCnt) answer.push_back(1);
if (cntB == maxCnt) answer.push_back(2);
if (cntC == maxCnt) answer.push_back(3);
return answer;
}
Author And Source
이 문제에 관하여([PROGRAMMERS] 모의고사(Level1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@yamkim/PROGRAMMERS-모의고사Level1
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
문제 링크: 코딩테스트 연습 > 완전탐색 > 모의고사
문제 이해
- 1번 수포자, 2번 수포자, 3번 수포자 모두 같은 패턴을 반복하며 찍습니다.
- 5지선다의 답안지에서 각 수포자가 찍어서 맞은 개수를 세고, 가장 높은 점수의
사람들을 answer에 넣습니다.
알고리즘 구현
- 1번 수포자는 5문제마다, 2번 수포자는 8문제마다, 3번 수포자는 10문제마다 같은
패턴을 반복합니다. (인덱스가 0~4, 0~7, 0~9 범위 내에 있음을 알 수 있습니다.) - 어떤 패턴으로 찍는지 각 학생에 대한 벡터를 만듭니다.
- answers의 모든 인덱스의 값을 비교하며 각 학생이 맞춘 문제를 기록합니다.
1을 만족시키기 위해, 이를 위해 나머지 연산을 사용하며 비교합니다.
알고리즘
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> stdA{1, 2, 3, 4, 5};
vector<int> stdB{2, 1, 2, 3, 2, 4, 2, 5};
vector<int> stdC{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int idxA = 0, idxB = 0, idxC = 0;
int cntA = 0, cntB = 0, cntC = 0;
for (int i = 0; i < answers.size(); ++i) {
if (stdA[idxA % 5] == answers[i]) ++cntA;
if (stdB[idxB % 8] == answers[i]) ++cntB;
if (stdC[idxC % 10] == answers[i]) ++cntC;
++idxA;
++idxB;
++idxC;
}
int maxCnt = max(cntA, max(cntB, cntC));
if (cntA == maxCnt) answer.push_back(1);
if (cntB == maxCnt) answer.push_back(2);
if (cntC == maxCnt) answer.push_back(3);
return answer;
}
Author And Source
이 문제에 관하여([PROGRAMMERS] 모의고사(Level1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yamkim/PROGRAMMERS-모의고사Level1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)