알고리즘/프로그래머스 1단계

프로그래머스 - 모의고사 - C++

게임만드는학생 2024. 7. 17. 16:56

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    
    int a1[5]={1,2,3,4,5};
    int a2[8]={2,1,2,3,2,4,2,5};
    int a3[10]={3,3,1,1,2,2,4,4,5,5};
    
    int cnt1=0,cnt2=0,cnt3=0;
    int id1=0,id2=0,id3=0;
    
    for(int i=0;i<answers.size();i++)
    {
        if(answers[i]==a1[id1])
            cnt1++;
        if(answers[i]==a2[id2])
            cnt2++;
        if(answers[i]==a3[id3])
            cnt3++;
        id1= (id1+1)%5;
        id2= (id2+1)%8;
        id3= (id3+1)%10;
    }
    int maxCnt = (cnt1 < cnt2)? max(cnt2,cnt3):max(cnt1,cnt3);
    if(maxCnt==cnt1)
        answer.push_back(1);
    if(maxCnt==cnt2)
        answer.push_back(2);
    if(maxCnt==cnt3)
        answer.push_back(3);
    
    return answer;
}

 

3명의 사람이 답을 표시하는 방식이 있다. 이 방식으로 채점했을 때 누가 가장많이 맞췄는지를 리턴하는 문제이다.

 

아주 간단하게 접근했다. 먼저 3명의 패턴을 배열에 각각 저장하고 for문을 돌리며 답이 맞았으면 각 변수에 카운트하는 방식이다. 

 

그 후 가장 큰 값을 maxCnt에 저장하고 1번부터 maxCnt와 동일한 점수인지 체크하여 answer에 넣는다.