본문 바로가기

Algorithm

[Algorithm] 프로그래머스 모의고사 C++

반응형

https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

풀이

  • 각 수포자가 찍는 방식의 반복 구간을 배열로 저장한다.
  • % 연산을 통해 각 수포자의 i번째 답을 구할 수 있다. 이를 정답과 비교한다.
  • 문제를 맞힌 개수를 비교해 가장 높은 수(maxCnt)를 찾는다.
  • 문제를 맞힌 개수가 같은 사람이 있다면 이를 정렬해 출력해야 하므로, 1번부터 maxCnt와 같은 값을 가진 사람을 answer에 넣는다.

 

소스코드

include <vector>
#include <iostream>
using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    int len = answers.size();

    int one[5] = {1, 2, 3, 4, 5};
    int two[8] = {2, 1, 2, 3, 2, 4, 2, 5};
    int thr[10] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    int oneCnt = 0;
    int twoCnt = 0;
    int thrCnt = 0;

    for(int i=0; i<len; i++){
        if(one[i%5] == answers[i]) oneCnt++;
        if(two[i%8] == answers[i]) twoCnt++;
        if(thr[i%10] == answers[i]) thrCnt++;            
    }

    int maxCnt = max(oneCnt, twoCnt);
    maxCnt = max(maxCnt, thrCnt);

    if(maxCnt == oneCnt) answer.push_back(1);
    if(maxCnt == twoCnt) answer.push_back(2);
    if(maxCnt == thrCnt) answer.push_back(3);

    return answer;
}
반응형