3명의 패턴이 달라서 크기가 다르기 때문에 각 사람마다 인덱스를 어떻게 접근해야할지 고민이 되었다.
그래서 3명의 정답 개수를 세는 함수를 만들어서 한 사람마다 이 함수를 호출해 정답의 개수를 도출하게끔 설게하였다.
그런데 다른 사람의 풀이를 보던 중 나머지 연산자를 활용해서 쉽게 사람 패턴 인덱스와 정답의 인덱스를 매치 시키는 것을 보고 그 방법을 활용해서 다시 풀어보았다.
*초기 코드
더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int correct_answer(const vector<int>& answers, const vector<int>& p)
{
int count = 0;
int p_size = p.size();
int t = 0;
for (int i = 0; i < answers.size(); ++i)
{
if (answers[i] == p[t]) ++count;
++t;
if (t == p_size) t = 0;
}
return count;
}
vector<int> solution(vector<int> answers)
{
vector<int> p1 = { 1,2,3,4,5 };
vector<int> p2 = { 2,1,2,3,2,4,2,5 };
vector<int> p3 = { 3,3,1,1,2,2,4,4,5,5 };
vector<int> result;
vector<int> answer;
result.push_back(correct_answer(answers, p1));
result.push_back(correct_answer(answers, p2));
result.push_back(correct_answer(answers, p3));
auto max_it = max_element(result.begin(), result.end());
for (int i = 0; i < 3; i++)
{
if (result[i] == (*max_it))
{
answer.push_back(i + 1);
}
}
return answer;
}
- correct_answer 함수를 만들어서 각각 정답의 개수를 도출하였다.
- 함수 내부를 보면 패턴을 가리킬 t 인덱스 변수를 만들어서 사이즈를 초과하게 되면 0으로 바꿔주는데 코드가 길어져서 깔끔하지 않은 듯 하다.
*수정 코드
더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers)
{
vector<int> p1 = {1,2,3,4,5};
vector<int> p2 = {2,1,2,3,2,4,2,5};
vector<int> p3 = {3,3,1,1,2,2,4,4,5,5,};
vector<int> result(3);
vector<int> answer;
for(int i = 0; i < answers.size(); ++i)
{
if(answers[i] == p1[i % p1.size()]) result[0]++;
if(answers[i] == p2[i % p2.size()]) result[1]++;
if(answers[i] == p3[i % p3.size()]) result[2]++;
}
int max_score = *max_element(result.begin(), result.end());
for(int i = 0; i < 3; ++i)
{
if(result[i] == max_score) answer.push_back(i + 1);
}
return answer;
}
- "i % p.size( )" 나머지 연산자를 활용해서 0 ~ 패턴 사이즈를 계속 순회할 수 있도록 하였다.
- 한 줄로 깔끔하게 표현되어진 모습이 마음에 들었다.
- 추가적으로 max_element 반환을 항상 iterator로 받았었는데, 함수 앞에 *를 사용해서 바로 해당 값을 가져올 수 있다는 것을 알게 되었다. 값으로 바로 받아 사용할 수 있어서 해당 값을 사용할 때 포인터를 사용하지 않아도 되어 가독성이 더 좋은 듯 하다.
'공부 > Code Cata' 카테고리의 다른 글
덧칠하기 (0) | 2025.01.08 |
---|---|
소수가 되는 경우 카운팅 (재귀호출) (1) | 2025.01.08 |
과일장수 (0) | 2025.01.07 |
priority_queue 우선순위 큐 활용 (0) | 2025.01.06 |
대칭되는 문자열 만들기 (0) | 2025.01.03 |