[프로그래머스] 모의고사 (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);

다른 사람의 코드 - 배울 점

  1. 직접 답안을 늘려줄 필요 없이 %를 이용해 인덱싱을 하면 된다.
    if(answers[i] == one[i%one.size()]) they[0]++;
  2. max_element() 함수가 있다!!!!
    int they_max = *max_element(they.begin(),they.end());

주절주절

  • 하다가 막혀서 묵혀두다 꺼내 푼 모의고사! 후련하다 ~~!!!

좋은 웹페이지 즐겨찾기