콘솔창 & 윈도우창/코딩 테스트

프로그래머스 LV.1 모의고사

뽀또치즈맛 2024. 11. 23. 02:00

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

 

해당 문제는 완전탐색 문제이다.

 

완전 탐색이란,

가능한 경우의 수를 모두 나열하면서 원하는 답을 찾는 방법이다.

따라서 해당 경우의 수를 하나하나 if문으로 찾아주면 된다.

 

 

내가 처음에 낸 풀이

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

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> results = {
        0,0,0
    };
    int st1 = 0, st2 = 0, st3 = 0;
    vector<vector<int>> students = {
        {1,2,3,4,5},
        {2,1,2,3,2,4,2,5},
        {3,3,1,1,2,2,4,4,5,5}
    };
    
    for(int i = 0; i < answers.size(); i++) {
        if(st1 == students[0].size()) st1 = 0;
        if(st2 == students[1].size()) st2 = 0;
        if(st3 == students[2].size()) st3 = 0;
        
        if(answers[i] == students[0][st1]) {
            results[0]++;
        }
        if(answers[i] == students[1][st2]) {
            results[1]++;
        }
        if(answers[i] == students[2][st3]) {
            results[2]++;
        }
        st1++; st2++; st3++;
    }
    
    int max = *max_element(results.begin(), results.end());
    
    for(int i = 0; i < 3; i++) {
        if(results[i] == max) {
            answer.push_back(i+1);
        }
    }
    
    return answer;
}

 

 

다른 사람 풀이보고,

사용되는 변수와 if문을 줄인 코드

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

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> results = {
        0,0,0
    };
    vector<vector<int>> students = {
        {1,2,3,4,5},
        {2,1,2,3,2,4,2,5},
        {3,3,1,1,2,2,4,4,5,5}
    };
    
    for(int i = 0; i < answers.size(); i++) {
        
        if(answers[i] == students[0][i % students[0].size()]) {
            results[0]++;
        }
        if(answers[i] == students[1][i % students[1].size()]) {
            results[1]++;
        }
        if(answers[i] == students[2][i % students[2].size()]) {
            results[2]++;
        }
    }
    
    int max = *max_element(results.begin(), results.end());
    
    for(int i = 0; i < 3; i++) {
        if(results[i] == max) {
            answer.push_back(i+1);
        }
    }
    
    return answer;
}