알고리즘

[프로그래머스]>완전탐색>모의고사

NUMERO_K 2020. 6. 15. 00:19

문제링크 https://programmers.co.kr/learn/courses/30/lessons/42840

 

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

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

programmers.co.kr

완전 탐색은 가능한 모든 경우의 수를 진행하여 결과를 찾아내는 방식입니다.

반복문을 사용한 방식과 재귀호출을 사용한 방식이 있습니다.

 

이 문제에선 수포자 1은 1,2,3,4,5로 규칙을, 수포자 2는 2,1,2,3,2,4,2,5로, 수포자 3은 3,3,1,1,2,2,4,4,5,5로 규칙이 정해져있습니다.

 

저는 이 규칙을 배열에 저장해두고, 원형 큐처럼 돌아가도록하여 주어진 모의고사 답안 배열과 비교를 해서 각 사람이 맞은 개수를 저장하였습니다.

 

그리고 세 사람의 맞은 개수 중 최대값을 구하고, 정렬을 하기보단 최대값과 같은 사람을 순서대로 정답에 저장하도록 하였습니다.

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    int count[3]={0,0,0};
    int p1[5]={1,2,3,4,5},p2[8]={2,1,2,3,2,4,2,5},p3[10]={3,3,1,1,2,2,4,4,5,5};
    for(int i=0 ; i<answers.size() ; ++i) {
        if(answers.at(i)==p1[i%5])
            ++count[0];
        if(answers.at(i)==p2[i%8])
            ++count[1];
        if(answers.at(i)==p3[i%10])
            ++count[2];
    }
    int m=-999;
    for(int i=0 ; i<3 ; ++i) {
        if(m<count[i])
            m=count[i];
    }
    for(int i=0 ; i<3 ; ++i) {
        if(m==count[i])
            answer.push_back(i+1);
    }
    return answer;
}