[Coding Test] 프로그래머스 - 모의고사

2019. 8. 20. 16:13Go to 알고리즘천재/탐색

문제

(알고리즘 : 완전탐색)


 

 

코딩테스트 연습 - 모의고사 | 프로그래머스

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

programmers.co.kr

 

 

 

나의 답안

(언어 : 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);