[프로그래머스] 모의고사 (C++)
요약
input: 문제의 정답 배열
output: 가장 높은 점수를 받은 학생(들)의 번호가 담긴 배열
조건: 학생 1, 2, 3이 각각 마킹한 답안이 문제에서 제공된다. 답안은 수열 형태로 제공된 정답의 길이만큼 연장될 수 있다. 여러 명일 경우는 오름차순으로 반환한다.
풀이
내 풀이
#include <vector>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> stu1, stu2, stu3, scores = {0, 0, 0}, answer;
stu1 = {1, 2, 3, 4, 5};
stu2 = {2, 1, 2, 3, 2, 4, 2, 5};
stu3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
vector<vector<int> > students = {stu1, stu2, stu3};
int maxScore = -1000;
for (vector<int>& elem : students) {
int len = elem.size();
if (answers.size() - len > 0) {
int loop = answers.size() / len;
for (int i = 0; i <= loop; i++) {
elem.insert(elem.end(), elem.begin(), elem.begin() + len);
}
}
}
for(int i = 0; i < answers.size(); i++) {
for (int j = 0; j < students.size(); j++) {
if (answers[i] == students[j][i]) {
scores[j]++;
}
}
}
for (int i = 0; i < scores.size(); i++) {
if (scores[i] >= maxScore) {
maxScore = scores[i];
}
}
for (int i = 0; i < scores.size(); i++) {
if (scores[i] == maxScore) {
answer.push_back((i+1));
}
}
return answer;
}
int main() {
vector<int> answers = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5};
vector<int> sol = {1};
assert(solution(answers) == sol);
solution(answers);
}
- 학생의 답안지를 벡터 안의 벡터로 넣어두고, 꺼내서 답안지의 길이만큼 늘린(insert) 후에 for문을 돌며 점수를 계산했다.
- 점수 계산을 마치면 가장 높은 점수를 확인한다. 최대 점수와 동일한 점수를 가진 학생 번호를 answer 벡터에 넣어(push_back) 반환한다. 두번의 절차를 거치므로 answer은 항상 오름차순이다.
내 코드 - 유의할 점
- for 문으로 벡터를 꺼내올 때, insert를 수행하기 위해 &을 사용해야 한다! 빼먹으면 안 더해진다... ;-;
- insert 의 parameter는 다음과 같다. (삽입위치, 첫 iter, 마지막 iter)
iterator insert (const_iterator position, InputIterator first, InputIterator last);
다른 사람의 코드 - 배울 점
- 직접 답안을 늘려줄 필요 없이 %를 이용해 인덱싱을 하면 된다.
if(answers[i] == one[i%one.size()]) they[0]++;
- max_element() 함수가 있다!!!!
int they_max = *max_element(they.begin(),they.end());
주절주절
- 하다가 막혀서 묵혀두다 꺼내 푼 모의고사! 후련하다 ~~!!!
Author And Source
이 문제에 관하여([프로그래머스] 모의고사 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@greenish0902/프로그래머스-모의고사-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)