문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42840
이문제는 완전탐색 문제이다 근데 프로그래머스에서 계속 힌트를 주는게 문제를 분류해서 위에 띄워 버려가지고 의도치 않게 힌트를 보게된다. 문제를 안읽어도 완탐으로 문제를 풀어야지 생각하게되서 앞으로 분류를 안보도록 노력해야겠다.
문제 설명
일단 수포자 1,2,3은 각각 다른 규칙으로 문제를 찍고 그중 가장 높은 점수를 받은 수포자를 출력하는것이다.
(주의사항) 여기서 수포자 가장 높은 점수를 받은사람이 겹치면 오름차순으로 출력 하는것 .
알고리즘
알고리즘은 간단하게 각 수포자의 규칙으로 벡터를 만들고 문제 벡터와 비교하며 cnt 값을 늘려준뒤 cnt 값이 최대인 사람을 출력하면 된다 . 오름차순정렬은 그냥 수포자 1부터 검사하면서 answer 벡터에 push_back 해주면 알아서 된다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> answer1{ 1,2,3,4,5 };
vector<int> answer2{ 2,1,2,3,2,4,2,5 };
vector<int> answer3{ 3,3,1,1,2,2,4,4,5,5 };
int count1 = 0;
int count2 = 0;
int count3 = 0;
int size = answers.size();
for (int i = 0; i < size; i++) {
int i1 = i % 5; //0~4
int i2 = i % 8; //0~7
int i3 = i % 10; // 0~9
if (answers[i] == answer1[i1])count1++;
if (answers[i] == answer2[i2])count2++;
if (answers[i] == answer3[i3])count3++;
}
int maxCount = max(count1, max(count2, count3));
if (maxCount == count1)answer.push_back(1);
if (maxCount == count2)answer.push_back(2);
if (maxCount == count3)answer.push_back(3);
}
|
cs |
'c++ > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 타겟넘버 (0) | 2020.04.01 |
---|---|
프로그래머스 : k번째수 (0) | 2020.03.27 |
프로그래머스 : 전화 번호 목록 (0) | 2020.03.27 |
프로그래머스 : 기능개발 (0) | 2020.03.27 |
프로그래머스 : 완주하지 못한 선수 (0) | 2020.03.27 |