본문 바로가기
Algorithm/programmers

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

by shine-jung 2021. 8. 2.
반응형

문제 링크

 

코딩하기 전 생각하기

/*
학생들의 반복되는 찍기 패턴을 파악한 후 각각 벡터로 저장하자.
count 배열을 생성한다.
answers 벡터를 순회한다.
    i를 패턴 벡터의 길이로 나눈 나머지 값을 이용하여
    정답과 학생의 답이 일치하면 count에 1을 더해준다.
count 배열의 최대값을 구하고
최대값만큼 정답을 맞춘 학생들의 번호를 answer 벡터에 저장한다.
answer 벡터를 반환한다.
*/

 


 

코드

#include <bits/stdc++.h>
using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> s1 = {1, 2, 3, 4, 5};
    vector<int> s2 = {2, 1, 2, 3, 2, 4, 2, 5};
    vector<int> s3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    vector<int> count = {0, 0, 0};
    int x1, x2, x3;
    for ( int i = 0; i < answers.size(); i++ ) {
        x1 = i%5, x2 = i%8, x3 = i%10;
        if ( answers[i] == s1[x1] ) count[0]++;
        if ( answers[i] == s2[x2] ) count[1]++;
        if ( answers[i] == s3[x3] ) count[2]++;
    }
    int max = *max_element(count.begin(), count.end());
    for ( int i = 0; i < 3; i++ ) {
        if ( count[i] == max )
            answer.push_back(i+1);
    }
    return answer;
}

 


 

느낀점

 

level 1 완전탐색 문제라서 그런지 어렵지 않게 통과할 수 있었다.

 

(주의) 기록용으로 작성한 글입니다. 코드가 허접하거나 알고리즘의 효율이 낮을 수 있습니다.

댓글 환영합니다!

반응형

댓글