모의고사 / 완전 탐색

2025. 1. 8. 10:22·공부/Code Cata

 

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
'공부/Code Cata' 카테고리의 다른 글
  • 덧칠하기
  • 소수가 되는 경우 카운팅 (재귀호출)
  • 과일장수
  • priority_queue 우선순위 큐 활용
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    모의고사 / 완전 탐색
    상단으로

    티스토리툴바