PS/브루트포스 알고리즘[Bruteforce]

백준 2303 숫자 게임(c++)

SeungbeomKim 2022. 10. 15. 09:55
반응형

https://www.acmicpc.net/problem/2303

 

2303번: 숫자 게임

N명이 모여 숫자 게임을 하고자 한다. 각 사람에게는 1부터 10사이의 수가 적혀진 다섯 장의 카드가 주어진다. 그 중 세 장의 카드를 골라 합을 구한 후 일의 자리 수가 가장 큰 사람이 게임을 이

www.acmicpc.net

<코드>

#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
#include <functional>
using namespace std;
int idx = 1;
bool cmp(pair<int,int>&p1, pair<int,int>&p2)
{
    if(p1.first==p2.first) return p1.second > p2.second;
    else return p1.first > p2.first;
}
int main()
{
    int n;
    vector<int>v;
    vector<pair<int,int>>v2;
    cin>>n;
    while(n--)
    {
        for(int i=0;i<5;i++)
        {
            int a;
            cin>>a;
            v.push_back(a);
        }
        int start = (v[0] + v[1] + v[2])%10;
        for(int i=0;i<3;i++)
        {
            for(int j=i+1;j<4;j++)
            {
                for(int k=j+1;k<5;k++)
                {
                    if((v[i]+v[j]+v[k])%10>start)
                    {
                        start = (v[i] + v[j] + v[k])%10;
                    }
                }
            }
        }
        v2.push_back(make_pair(start,idx));
        idx++;
        v.clear();
    }
    sort(v2.begin(),v2.end(),cmp);
    cout<<v2[0].second<<'\n';

}

<풀이 과정>

first : 점수 second : 점수 입력받은 사람의 순서

로직을 생각해보면 입력받는 사람의 (점수 5개 중 3개의 점수 합) % 10, 인덱스(입력받는 사람의 순서)를 pair벡터에 push해줘야 한다.

왜냐하면 출력이 (점수 5개 중 3개의 점수 합) % 10이 최대인 사람의 인덱스이기 때문이다.

그리고 cmp함수를 만든 목적은 불가피하게 1번 사람과 2번 사람의 점수의 최댓값이 같은 경우에는 벡터의 2번째 요소를 기준으로 내림차순 정렬시키기 위함이다. 

 

반응형