본문 바로가기
코딩테스트/프로그래머스(lv1)

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

by 볼링치는 개발자 2021. 1. 24.
반응형

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를 반복한다.

 

주어진 답안만큼 반복문을 돌아, 각자의 찍는 패턴을 비교해 맞으면 총점수에 1점씩 더해서 총점수를 저장해두었다.

3 사람의 점수를 담고 정렬하여 최고점을 설정하였다.

 

해당 최고점과 같은 점수를 받은 사람이 제일 잘 봤거나 동점자 일 것이다.

 

해당 로직은 아래 소스코드로 구현했다.

 

소스코드

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

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    //3사람의 점수담을 배열
    int score[3]={0,};
    //3사람의 문제를 찍는 패턴
    int p1[5] ={1,2,3,4,5};
    int p2[8] = {2,1,2,3,2,4,2,5};
    int p3[10] = {3,3,1,1,2,2,4,4,5,5};
    
    //주어진 답과, 찍는 패턴을 계속 비교해 맞을때마다 1점씩 추가
    for(int i=0;i<answers.size();i++) {
        if(p1[i%5] == answers[i])
            score[0]++;
        if(p2[i%8] == answers[i])
            score[1]++;
        if(p3[i%10] == answers[i])
            score[2]++;
    }
    
    //3사람의 점수 담고 정렬
    vector<int> result = {score[0], score[1], score[2]};
    sort(result.begin(), result.end());
    
    //최고 점수를 설정
    int max = *(result.end()-1);
    
    //최고 점수와 동일한 점수를 받은 사람을 저장
    for(int i=0; i<result.size();i++) {
        if(score[i] == max)
            answer.push_back(i+1);
    }
    return answer;
}
반응형

댓글