[프로그래머스/C++]Lv.1 - 모의고사

YH J·2023년 6월 1일
0

프로그래머스

목록 보기
105/168

문제 링크

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

내 풀이

1,2,3번 사람들의 정답쓰는걸 배열로 미리 저장해둔다.
answers를 for문을 돌리면서 각각 배열과 비교해서 정답을 맞춘 개수를 구한다.
cmp함수를 만들어서 정답 맞춘 개수에 따라 정렬 한 뒤 s[0]을 미리 넣어두고 s[1]과 s[2]가 s[0]과 같은지 비교해서 같으면 넣어준다.

내 코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(pair<int,int> a, pair<int,int> b)
{
    if(a.second > b.second)
        return a.first > b.first;
    return a.first < b.first;
}

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    
    int arr1[5] = {1,2,3,4,5};
    int arr2[8] = {2,1,2,3,2,4,2,5};
    int arr3[10] = {3,3,1,1,2,2,4,4,5,5};
    
    vector<pair<int,int>> s {make_pair(1,0),make_pair(2,0),make_pair(3,0)};
    
    for(int i = 0; i < answers.size(); i++)
    {
        if(answers[i] == arr1[i%5])
            s[0].second++;
        if(answers[i] == arr2[i%8])
            s[1].second++;
        if(answers[i] == arr3[i%10])
            s[2].second++;
    }  
    
    sort(s.begin(),s.end(),cmp);
    answer.push_back(s[0].first);
    
    for(int i = 1; i < 3; i++)
    {
        if(s[0].second == s[i].second)
            answer.push_back(s[i].first);
    }
    
    return answer;
}

다른 사람의 풀이

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> one = {1,2,3,4,5};
vector<int> two = {2,1,2,3,2,4,2,5};
vector<int> thr = {3,3,1,1,2,2,4,4,5,5};

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> they(3);
    for(int i=0; i<answers.size(); i++) {
        if(answers[i] == one[i%one.size()]) they[0]++;
        if(answers[i] == two[i%two.size()]) they[1]++;
        if(answers[i] == thr[i%thr.size()]) they[2]++;
    }
    int they_max = *max_element(they.begin(),they.end());
    for(int i = 0; i< 3; i++) {
        if(they[i] == they_max) answer.push_back(i+1);
    }
    return answer;
}

다른 사람의 풀이 해석

방식은 비슷하나 굳이 pair로 하지않고 정답맞춘 수만 넣어준뒤
max_element를 찾아서 그 값과 비교해가면서 같을경우만 넣어준다.

profile
게임 개발자 지망생

0개의 댓글