본문 바로가기

Algorithm/Programers - C++

[프로그래머스]완전탐색 - 모의고사

문제

 

풀이

#include <string>
#include <vector>
#include <algorithm> //max_element

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> sum(3,0);
    
    vector<int> first = {1,2,3,4,5};
    vector<int> second = {2,1,2,3,2,4,2,5};
    vector<int> third = {3,3,1,1,2,2,4,4,5,5};
    
    for(int i=0; i<answers.size(); i++){
        //수포자 1
        if(answers[i] == first[i%5]) sum[0] ++;
        //수포자 2
        if(answers[i] == second[i%8]) sum[1]++; 
        //수포자 3
        if(answers[i] == third[i%10]) sum[2]++;    
    }

    int max = *max_element(sum.begin(), sum.end());
    for(int i=0;i<3;i++){
        if(sum[i] == max) answer.push_back(i+1);
    }
    
    return answer;
}

해결 과정

1. 수포자들의 정답을 벡터 배열로 만든다

2. 반복문을 돌려 탐색하며 answers와 수포자의 정답이 맞을 경우 sum벡터 배열 값을 +1 한다.

3. sum의 최댓값을 구하고, 최댓값을 가진 수포자는 모두 asnwer에 push_back 한다.

 

처음엔 무작정 규칙을 찾아서 비교하는 방법을 생각했으나, 효율성이 너무 좋지 않은 것 같아 수포자의 정답을 백터 배열로 만들어 비교하는 방법을 선택했다. 

 

 

max_element

-algorithm 라이브러리에 있는 vector의 최댓값을 구해주는 함수

 


 

https://notepad96.tistory.com/entry/C-Vector-%EC%B5%9C%EB%8C%80%EA%B0%92-%EC%B5%9C%EC%86%8C%EA%B0%92-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EA%B5%AC%ED%95%98%EA%B8%B0

 

C++ Vector 최대값, 최소값, 인덱스 구하기

1. 최대값, 최소값 vector 컨테이너에서 최대값, 최소값을 구할 경우 for문을 작성할 수도 있지만 이는 복잡하다. 그래서 algorithm 라이브러리의 있는 max_element를 사용한다면 한줄로도 간단하게 최대

notepad96.tistory.com