알고리즘

백준 2303번 숫자 게임 C++

영춘권의달인 2022. 1. 8. 14:10

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

 

각 사람이 3장의 카드를 뽑는 경우의 합을 백트래킹을 통하여 모두 구하고, %10 연산을 통해 일의 자리만 비교하였다.

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>

using namespace std;
typedef long long ll;

int n;
vector<vector<int>> v(1001, vector<int>(5));
int ans = -1;
int maxV = -1;

void BT(int num, int idx, int cnt, int sum) {
	if (cnt >= 3) {
		int res = sum % 10;
		if (res >= maxV) {
			maxV = res;
			ans = num;
		}
		return;
	}
	for (int i = idx; i < 5; i++) {
		BT(num, i + 1, cnt + 1, sum + v[num][i]);
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> n;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < 5; j++) {
			cin >> v[i][j];
		}
	}
	for (int i = 1; i <= n; i++) {
		BT(i, 0, 0, 0);
	}
	cout << ans;
};