-
완전 탐색 알고리즘 문제 : 프로그래머스 LEVEL 1(모의고사) - 사용 언어 : C++ - 해결 날짜 : 2021-01-11
**- 해결 방법** : 각각의 수포자들이 문제를 맞출 때 마다 그 수를 증가시키기 위해 a,b,c 라는 int형 변수를 선언하였다. 첫 수포자의 경우 5로 나누었을 때 나머지에 1을 더한 값과 일치하면 답을 맞춘 것이고, 두 번째 수포자의 경우 짝수 번째 일 경우는 2일 때, 홀수 번째 일 경우는 8로 나누었을 때 나머지가 1,3,5,7인 경우에 각각 답이 1,3,4,5 이면 답을 맞춘 것이고, 세 번째 수포자의 경우 10으로 나누었을 때 나머지가 0,1일 경우 답이 3이면, 나머지가 2,3일 경우 답이 1이면, 나머지가 4,5일 경우 답이 2면, 나머지가 6,7일 경우 답이 4면, 그 외의 경우 답이 5면 답을 맞춘 것이다. 이렇게 각각의 정답을 맞춘 횟수를 answer vector에 저장한 다음 compare 함수를 사용하여 최대 값을 찾아 최대 값을 갖는 인덱스를 반환하여 문제를 해결하였다. - 코드 ``` #include <string> #include <vector> #include <algorithm> using namespace std; vector<int> compare(vector<int> compare) { vector<int> answer; int max = *max_element(compare.begin(), compare.end()); //최대 값 찾기 for (int i = 0; i < compare.size(); i++) { if (compare[i] == max) answer.push_back(i+1); //최대 값을 갖는 인덱스 찾기 } return answer; } vector<int> solution(vector<int> answers) { vector<int> answer; int a = 0; int b = 0; int c = 0; for (int i = 0; i < answers.size(); i++) { //첫 수포자 if (((i % 5) + 1) == answers[i]) { a++; } //두 번째 수포자 if (i % 2 == 0) { if (answers[i] == 2) b++; } else if(i % 2 == 1) { if (i % 8 == 1 && answers[i] == 1) b++; else if (i % 8 == 3 && answers[i] == 3) b++; else if (i % 8 == 5 && answers[i] == 4) b++; else if (i % 8 == 7 && answers[i] == 5) b++; } //세 번째 수포자 if (i % 10 == 0 || i % 10 == 1) { if (answers[i] == 3) c++; } else if (i % 10 == 2 || i % 10 == 3) { if (answers[i] == 1) c++; } else if (i % 10 == 4 || i % 10 == 5) { if (answers[i] == 2) c++; } else if (i % 10 == 6 || i % 10 == 7) { if (answers[i] == 4) c++; } else { if (answers[i] == 5) c++; } } answer.push_back(a); answer.push_back(b); answer.push_back(c); answer = compare(answer); return answer; } ```