프로그래머스-모의고사

hyoJeong·2021년 6월 5일
0

이번에 풀어본 문제는 프로그래머스의 모의고사라는 문제입니다.
해당 문제는 풀었을때..?구현인거 같았습니다.
문제링크: https://programmers.co.kr/learn/courses/30/lessons/42840
각 배열의 순서는 고정되어 있고 정답과 일치 여부를 판단 하면 되기 때문에, 각 배열별로 정답과 일치할경우 각 배열별 카운트 변수값을 증가시켜주고, 최대로 많이 맞춘 정답수를 확인하여 해당 정답수와 같으면 answer에 push_back()하면 됩니다.!

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int res;
int cnt1;
int cnt2;
int cnt3;
int m=-100000;
vector<int> solution(vector<int> answers) {
    vector<int> answer;
    int arr1[10001];
    int arr2[10001];
    int arr3[10001];

    for(int i=0;i<answers.size();i++){
        if(i%5==0){
            arr1[i]=1;
        }
        else if(i%5==1){
            arr1[i]=2;
        }
        else if(i%5==2){
            arr1[i]=3;
        }
        else if(i%5==3){
            arr1[i]=4;
        }
        else if(i%5==4){
            arr1[i]=5;
        }

    }

    for(int i=0;i<answers.size();i++){
        if(i%8==0){
            arr2[i]=2;
        }
        else if(i%8==1){
            arr2[i]=1;
        }
        else if(i%8==2){
            arr2[i]=2;
        }
        else if(i%8==3){
            arr2[i]=3;
        }
        else if(i%8==4){
            arr2[i]=2;
        }
        else if(i%8==5){
            arr2[i]=4;
        }
        else if(i%8==6){
            arr2[i]=2;
        }
        else if(i%8==7){
            arr2[i]=5;
        }

    }

        for(int i=0;i<answers.size();i++){
        if(i%10==0){
            arr3[i]=3;
        }
        else if(i%10==1){
            arr3[i]=3;
        }
        else if(i%10==2){
            arr3[i]=1;
        }
        else if(i%10==3){
            arr3[i]=1;
        }
        else if(i%10==4){
            arr3[i]=2;
        }
        else if(i%10==5){
            arr3[i]=2;
        }
        else if(i%10==6){
            arr3[i]=4;
        }
        else if(i%10==7){
            arr3[i]=4;
        }
        else if(i%10==8){
            arr3[i]=5;
        }
        else if(i%10==9){
            arr3[i]=5;
        }


    }

    for(int i=0;i<answers.size();i++){
        if(answers[i]==arr1[i])
        {
            cnt1++;
        }
        if(answers[i]==arr2[i])
        {
            cnt2++;
        }
        if(answers[i]==arr3[i])
        {
            cnt3++;
        }
    }

    if(m<cnt1){
        m=cnt1;
    }
    if(m<cnt2){
        m=cnt2;
    }
    if(m<cnt3){
        m=cnt3;
    }

    if(m==cnt1){
       answer.push_back(1);
    }
    if(m==cnt2){
       answer.push_back(2);
    }
    if(m==cnt3){
       answer.push_back(3);
    }


    return answer;
}

->위의 코드는 처음 풀었을때 작성한 코드이고 다른 분들의 코드를 참고해보니, 좀더 깔끔하게 작성할 수 있는 방법이 존재해, 참고해 다시 수정해보았습니다.

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int res;
int cnt1;
int cnt2;
int cnt3;
int m=-100000;
vector<int> solution(vector<int> answers) {
    vector<int> answer;
    int arr1[]={1,2,3,4,5};
    int arr2[]={2,1,2,3,2,4,2,5,2,1};
    int arr3[]={3,3,1,1,2,2,4,4,5,5,3,3};


    for(int i=0;i<answers.size();i++){
        if(answers[i]==arr1[i%5])
        {
            cnt1++;
        }
        if(answers[i]==arr2[i%8])
        {
            cnt2++;
        }
        if(answers[i]==arr3[i%10])
        {
            cnt3++;
        }
    }

    if(m<cnt1){
        m=cnt1;
    }
    if(m<cnt2){
        m=cnt2;
    }
    if(m<cnt3){
        m=cnt3;
    }

    if(m==cnt1){
       answer.push_back(1);
    }
    if(m==cnt2){
       answer.push_back(2);
    }
    if(m==cnt3){
       answer.push_back(3);
    }


    return answer;
}

0개의 댓글