영벨롭 개발 일지

[프로그래머스][C++]Level 1 모의고사 풀이: 완전탐색 본문

알고리즘 문제 풀이/프로그래머스

[프로그래머스][C++]Level 1 모의고사 풀이: 완전탐색

영벨롭 2022. 3. 9. 18:08

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

 

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

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

programmers.co.kr

 

[풀이 과정]

 

1. 수포자들이 찍는 수열을 person 벡터에 세팅

2. 정답의 개수만큼 정답과 수포자의 답과 비교

3. 같다면 맞춘 문제의 개수 correct 값 증가

4. 가장 많이 맞춘 개수를 maxnum에 저장

5. 모든 수포자들을 탐색할 때까지 2~4과정 반복

6. correct 벡터의 원소 중 maxnum과 같은 원소가 있다면 answer에 index+1 push

 

#include <string>
#include <vector>
#include <cstdlib>

using namespace std;

vector<int> solution(vector<int> answers) {
	vector<int> answer;
	int maxnum = 0;
	vector<vector<int>> person;
	vector<int> correct(3, 0);
	person.push_back({ 1, 2, 3, 4, 5 });
	person.push_back({ 2, 1, 2, 3, 2, 4, 2, 5 });
	person.push_back({ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 });

	for (int i = 0; i < 3; i++) {
		vector<int> p = person[i];
        
        int j=0;
        
        for (int k = 0; k < answers.size(); k++) {
            if(j>=p.size())
                j=0;
            
			if (answers[k] == p[j]) {
				correct[i]++;
			}
            j++;
        }
		maxnum = max(maxnum, correct[i]);
	}

	for (int i = 0; i < 3; i++) {
		if (maxnum == correct[i]) {
			answer.push_back(i + 1);
		}
	}

	return answer;
}
반응형