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번째 요소를 기준으로 내림차순 정렬시키기 위함이다.
'PS > 브루트포스 알고리즘[Bruteforce]' 카테고리의 다른 글
백준 2503 숫자 야구(c++) (0) | 2022.10.19 |
---|---|
백준 1526 가장 큰 금민수(c++) (0) | 2022.10.19 |
백준 2003 수들의 합2(c++) (0) | 2022.10.14 |
백준 2851 슈퍼 마리오(c++) (1) | 2022.10.12 |
백준 1018 체스판 다시 칠하기(c++) (1) | 2022.09.20 |