프로그래머스
2022. 6. 21. 00:18ㆍ카테고리 없음
수포자 모의고사
https://programmers.co.kr/learn/courses/30/lessons/42840#
교수님이 나의 생각으로 접근한 방식
더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers)
{
size_t size = answers.size();
int counts[3] = { 0 };
for (size_t i = 0; i < size; i++)
{
int currentAnswer = answers[i];
if (currentAnswer == 1)
{
if (i % 5 == 0)
{
counts[0]++;
}
if (i % 8 == 1)
{
counts[1]++;
}
if (i % 10 == 2 || i % 10 == 3)
{
counts[2]++;
}
}else if (currentAnswer == 2)
{
if (i % 5 == 1)
{
counts[0]++;
}
if (i % 8 == 0 || i % 8 == 2 || i % 8 == 4 || i % 8 == 6)
{
counts[1]++;
}
if (i % 10 == 4 || i % 10 == 5)
{
counts[2]++;
}
}
else if (currentAnswer == 3)
{
if (i % 5 == 2)
{
counts[0]++;
}
if (i % 8 == 3)
{
counts[1]++;
}
if (i % 10 == 0 || i % 10 == 1)
{
counts[2]++;
}
}
else if (currentAnswer == 4)
{
if (i % 5 == 3)
{
counts[0]++;
}
if (i % 8 == 5)
{
counts[1]++;
}
if (i % 10 == 6 || i % 10 == 7)
{
counts[2]++;
}
}
else
{
if (i % 5 == 4)
{
counts[0]++;
}
if (i % 8 == 7)
{
counts[1]++;
}
if (i % 10 == 8 || i % 10 == 9)
{
counts[2]++;
}
}
}
int max = 0;
for (int i = 0; i < 3; i++)
{
if (max < counts[i])
{
max = counts[i];
}
}
vector<int>answer;
for (int i = 0; i < 3; i++)
{
if (max == counts[i])
{
answer.push_back(i+1);
}
}
sort(answer.begin(),answer.end());
return answer;
}
코드가 많이길다 뭔가 하드코딩의 느낌이 물씬느껴짐
Look up table 써서 만든거
더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers)
{
// 1. 각 사람마다 몇 문제씩 맞췄는지 확인한다.
// 모든 문제의 답을 순회하면서 각 사람마다 횟수를 센다.
int counts[3] = { 0 };
// 룩업테이블
static const int solutions[3][10] = {
{ 1, 2, 3, 4 ,5 },
{ 2, 1, 2, 3, 2, 4, 2, 5 },
{ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }
};
static const int patternSize[3] = { 5, 8, 10 }; //정답 맞추기위해서 만든 인덱스
size_t size = answers.size();
for (int i = 0; i < size; ++i)
{
int currentAnswer = answers[i];
if (currentAnswer == solutions[0][i % patternSize[0]])//[0]{1,2,3,4,5} 비교해서 카운트세기
{
++counts[0];
}
if (currentAnswer == solutions[1][i % patternSize[1]])//[1]{2,1,2,3,2,4,2,5} 비교해서 카운트세기
{
++counts[1];
}
if (currentAnswer == solutions[2][i % patternSize[2]])// [2] { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 } 비교해서 카운트세기
{
++counts[2];
}
}
// 2. 가장 많이 맞춘 사람을 확인한다.
// 2-1. 최대값을 저장한다.
int maxCount = 0;
for (int i = 0; i < 3; ++i)
{
if (maxCount < counts[i])
{
maxCount = counts[i];
}
}
// 2-2. 최댓값과 같은지 비교한다.
vector<int> answer;
for (int i = 0; i < 3; ++i)
{
if (maxCount == counts[i])
{
answer.push_back(i + 1);
}
}
// 2-3. 같다면 ? answer에 삽입한다.
// 3. 여러 명이라면 오름차순으로 정렬한다.
sort(answer.begin(), answer.end());
return answer;
}