https://school.programmers.co.kr/learn/courses/30/lessons/42840
해당 문제는 완전탐색 문제이다.
완전 탐색이란,
가능한 경우의 수를 모두 나열하면서 원하는 답을 찾는 방법이다.
따라서 해당 경우의 수를 하나하나 if문으로 찾아주면 된다.
내가 처음에 낸 풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> results = {
0,0,0
};
int st1 = 0, st2 = 0, st3 = 0;
vector<vector<int>> students = {
{1,2,3,4,5},
{2,1,2,3,2,4,2,5},
{3,3,1,1,2,2,4,4,5,5}
};
for(int i = 0; i < answers.size(); i++) {
if(st1 == students[0].size()) st1 = 0;
if(st2 == students[1].size()) st2 = 0;
if(st3 == students[2].size()) st3 = 0;
if(answers[i] == students[0][st1]) {
results[0]++;
}
if(answers[i] == students[1][st2]) {
results[1]++;
}
if(answers[i] == students[2][st3]) {
results[2]++;
}
st1++; st2++; st3++;
}
int max = *max_element(results.begin(), results.end());
for(int i = 0; i < 3; i++) {
if(results[i] == max) {
answer.push_back(i+1);
}
}
return answer;
}
다른 사람 풀이보고,
사용되는 변수와 if문을 줄인 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> results = {
0,0,0
};
vector<vector<int>> students = {
{1,2,3,4,5},
{2,1,2,3,2,4,2,5},
{3,3,1,1,2,2,4,4,5,5}
};
for(int i = 0; i < answers.size(); i++) {
if(answers[i] == students[0][i % students[0].size()]) {
results[0]++;
}
if(answers[i] == students[1][i % students[1].size()]) {
results[1]++;
}
if(answers[i] == students[2][i % students[2].size()]) {
results[2]++;
}
}
int max = *max_element(results.begin(), results.end());
for(int i = 0; i < 3; i++) {
if(results[i] == max) {
answer.push_back(i+1);
}
}
return answer;
}
'콘솔창 & 윈도우창 > 코딩 테스트' 카테고리의 다른 글
프로그래머스 LV.2 모음사전 (1) | 2024.12.14 |
---|---|
백준 골드2 1167 트리의 지름 구하기 (3) | 2024.12.06 |
프로그래머스 LV.2 가장 큰 수 (0) | 2024.11.19 |
[PCCP 기출문제] LV.1 붕대감기 (0) | 2024.11.17 |
프로그래머스 LV.2 오픈채팅방 (카카오 코테) (0) | 2024.11.15 |