본문 바로가기
OLD_알고리즘/Programmers - 알고리즘

Programmers ] Level 1 - 모의고사

by 달승 2021. 1. 13.

 

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

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

programmers.co.kr

 

 

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
> 1번 수포자는 1, 2, 3, 4, 5로 반복하여 문제를 찍습니다.

2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
> 2번 수포자는 2, 1, 2, 3, 2, 4, 2, 5로 반복하여 문제를 찍습니다.

3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
> 2번 수포자는 3, 3, 1, 1, 2, 2, 4, 4, 5, 5로 반복하여 문제를 찍습니다.

✔ 이 반복을 배열로 만들어서 문제를 풀어줍니다.

 

✔ 정답이 담긴 answers은 길이가 10,000이 될 수 있으므로 반복문은 answers의 size만큼 반복해줍니다.

 

✔ answers의 길이만큼 반복하여 맞은 문제를 찾아갈 때,

   1번부터 3번 수포자는 각각 5, 8, 10개의 번호로 반복하여 문제를 찍습니다.

   따라서 인덱스가 넘어갈 때 다시 반복될 수 있도록 %로 처리를 해줘야 합니다. ( i % 5, i % 8, i % 10 )

 

✔ 맞춘 문제를 ++하면서, 가장 큰 정답의 개수를 확인합니다. 그 후 가장 많이 맞춘 사람을 return해줍니다.(오름차순으로)

 

 

🌱 정답코드

 


처음 풀이

 

 

다른 코드 참고 풀이

* <algorithm> max 함수 활용

    maxCount = max(max(count[0], count[1]), count[2]);

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    
    vector<int> student1 = {1, 2, 3, 4, 5}; 
    vector<int> student2 = {2, 1, 2, 3, 2, 4, 2, 5}; 
    vector<int> student3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    vector<int> count(3, 0);
    int maxCount = 0;
    
    for(int i = 0; i < answers.size(); i++){
        if(answers[i] == student1[i % 5]) count[0]++;               
        if(answers[i] == student2[i % 8]) count[1]++;   
        if(answers[i] == student3[i % 10]) count[2]++;   
    }
    
    maxCount = max(max(count[0], count[1]), count[2]);
    
    for(int i = 0; i < count.size(); i++){
        if(maxCount == count[i]){
            answer.push_back(i + 1);
        }
    }
    
    return answer;
}

댓글