1일1알

백준 2116번 주사위 쌓기 C++ 본문

알고리즘

백준 2116번 주사위 쌓기 C++

영춘권의달인 2022. 5. 5. 11:48

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

 

제일 밑이 1~6인 경우를 모두 해보면서 가장 큰 값을 찾았다.

 

#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>
#include <iomanip>

using namespace std;
using ll = long long;

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

	int n;
	cin >> n;
	vector<vector<pair<int, int>>> v(n, vector<pair<int, int>>(3));
	for (int i = 0; i < n; i++) {
		int a, b, c, d, e, f;
		cin >> a >> b >> c >> d >> e >> f;

		v[i][0].first = a;
		v[i][0].second = f;

		v[i][1].first = b;
		v[i][1].second = d;

		v[i][2].first = c;
		v[i][2].second = e;
	}

	int maxSum = 0;
	for (int i = 1; i <= 6; i++) {
		int down = i;
		int sum = 0;
		int downIdx;
		for (int j = 0; j < n; j++) {
			for (int k = 0; k < 3; k++) {
				if (v[j][k].first == down) {
					down = v[j][k].second;
					downIdx = k;
					break;
				}
				if (v[j][k].second == down) {
					down = v[j][k].first;
					downIdx = k;
					break;
				}
			}
			int maxVal = 0;
			for (int k = 0; k < 3; k++) {
				if (k == downIdx) continue;
				maxVal = max(maxVal, max(v[j][k].first, v[j][k].second));
			}
			sum += maxVal;
		}
		maxSum = max(maxSum, sum);
	}
	cout << maxSum;
};

'알고리즘' 카테고리의 다른 글

백준 14499번 주사위 굴리기 C++  (0) 2022.05.08
백준 1817번 짐 챙기는 숌 C++  (0) 2022.05.06
백준 1756번 피자 굽기 C++  (0) 2022.05.03
백준 1544번 사이클 단어 C++  (0) 2022.05.02
백준 1531번 투명 C++  (0) 2022.04.30