오답노트

프로그래머스 - 1단계 - 완전탐색 본문

C,C++/코딩테스트

프로그래머스 - 1단계 - 완전탐색

권멋져 2022. 5. 30. 19:38
https://programmers.co.kr/learn/courses/30/lessons/42840?language=cpp 
 

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

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

programmers.co.kr

- 문제 파악

수포자 1,2,3 은 수학문제를 각자의 패턴으로 찍으려고한다. 이 때 정수 배열로 문제들의 정답을 알려줄 때, 이 중에서 가장 점수가 높게 나오는 사람을 출력하라. 만약 동점자가 있을 경우, 오름차순으로 출력하라.

 

- 정답

완전탐색이라고 하지만 굳이 그렇게 풀지 않아도 되더라..

#include "bits/stdc++.h"

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    
    int score1 = 0, score2 = 0, score3 = 0;
    int pos1 = 0, pos2 = 0, pos3 = 0;
    
    int arr1[] = {1,2,3,4,5};
    int arr2[] = {2,1,2,3,2,4,2,5};
    int arr3[] = {3,3,1,1,2,2,4,4,5,5};
    
    int size1 = sizeof(arr1)/sizeof(int);
    int size2 = sizeof(arr2)/sizeof(int);
    int size3 = sizeof(arr3)/sizeof(int);
    
    for(auto a : answers)
    {
        if(a == arr1[pos1++])
            score1++;        
        if(pos1 >= size1)
            pos1 = 0;
                
        if(a == arr2[pos2++])
            score2++;
        if(pos2 >= size2)
            pos2 = 0;
        
        
        if(a == arr3[pos3++])        
            score3++;
        if(pos3 >= size3)
            pos3 = 0;
        
    }
    
    
    int nMax = max(score1,max(score2,score3));
    
    if(nMax == score1)
        answer.push_back(1);
    
    if(nMax == score2)
        answer.push_back(2);
    
    if(nMax == score3)
        answer.push_back(3);
    
    return answer;
}