[Coding Test] 프로그래머스 - 모의고사
2019. 8. 20. 16:13ㆍGo to 알고리즘천재/탐색
문제
(알고리즘 : 완전탐색)
나의 답안
(언어 : C++)
3개의 찍기 패턴을 vector로 미리 선언해두고, 답과 비교하여 점수를 구함.
점수가 담긴 배열의 최고점수를 구하여, 최고점수와 같은 점수의 사람을 리턴! (max_element 사용)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 점수 계산 함수
int cal_score(vector<int> answers, vector<int> p){
// 점수 담을 배열
int score=0;
// 정답 벡터의 크기
int a_size = answers.size();
// 찍기패턴 배열의 크기
int p_size = p.size();
for(int i = 0; i < a_size; i++){
if(answers[i]==p[i%p_size]){
score++;
}
}
return score;
}
vector<int> solution(vector<int> answers){
vector<int> answer;
int v1[5] = {1, 2, 3, 4, 5};
int v2[8] = {2, 1, 2, 3, 2, 4, 2, 5};
int v3[10] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
vector<int> p1(v1, v1+5);
vector<int> p2(v2, v2+8);
vector<int> p3(v3, v3+10);
int size = answers.size();
int score[3];
// 점수 계산
score[0] = cal_score(answers, p1);
score[1] = cal_score(answers, p2);
score[2] = cal_score(answers, p3);
// 최고점 구하기
int best_score = *max_element(score, score+3);
// 최고점 맞은 사람 구하기
for(int i = 0; i < 3; i++){
if(score[i]==best_score){
answer.push_back(i+1);
}
}
return answer;
}
사용 개념
1. <algorithm>의 max_element() 함수로 배열의 최대값 추출
*max_element(시작 포인터, 끝 포인터);
→ * 를 해주어야 max_element가 리턴하는 값을 참조함
배열의 경우 : max_element(배열명, 배열명+배열크기);
벡터의 경우 : max_element(벡터.begin(), 벡터.end());
2. 벡터에 값을 한꺼번에 넣기 위해, 배열을 이용함
vector<int> v(배열명, 배열명+배열크기);
ex
------
int arr[5] = {1, 2, 3, 4, 5};
vector<int> v(arr, arr+5);