https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
해당 문제는 완전탐색 문제이다.
완전 탐색이란,
가능한 경우의 수를 모두 나열하면서 원하는 답을 찾는 방법이다.
따라서 해당 경우의 수를 하나하나 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 |