본문 바로가기
ps

[백준] 2116 - 주사위 쌓기

by kariskan 2022. 9. 3.

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

 

2116번: 주사위 쌓기

첫줄에는 주사위의 개수가 입력된다. 그 다음 줄부터는 한 줄에 하나씩 주사위의 종류가 1번 주사위부터 주사위 번호 순서대로 입력된다. 주사위의 종류는 각 면에 적혀진 숫자가 그림1에 있는

www.acmicpc.net

 

모든 경우를 다 해볼 필요가 없다.

사실 1번 주사위의 윗면만 정하면, 모든 주사위의 아래/윗 면이 정해지게 되고, 그리디 하게 남은 부분의 최댓값을 더하면 된다.

 

#include <iostream>
using namespace std;

int n, arr[10000][6];
int no[6] = { 5,3,4,1,2,0 };

int main() {
	cin >> n;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < 6; j++) {
			cin >> arr[i][j];
		}
	}
	int ans = 0;
	for (int k = 0; k < 6; k++) {
		int up = arr[0][k];
		int temp = 0;

		for (int i = 0; i < 6; i++) {
			if (i != k && i != no[k]) {
				temp = max(temp, arr[0][i]);
			}
		}

		for (int i = 1; i < n; i++) {
			int findBottomIdx = 0;
			for (int j = 0; j < 6; j++) {
				if (up == arr[i][j]) {
					findBottomIdx = j;
					break;
				}
			}
			int tempp = 0;
			for (int j = 0; j < 6; j++) {
				if (j != findBottomIdx && j != no[findBottomIdx]) {
					tempp = max(tempp, arr[i][j]);
				}
			}
			temp += tempp;
			up = arr[i][no[findBottomIdx]];
		}
		ans = max(ans, temp);
	}

	cout << ans;
}

'ps' 카테고리의 다른 글

[백준] 2698 - 인접한 비트의 개수  (0) 2022.09.03
[백준] 6987 - 월드컵  (0) 2022.09.03
[백준] 2141 - 우체국  (0) 2022.09.03
[백준] 17435 - 합성 함수와 쿼리  (0) 2022.09.03
[백준] 9470 - Strahler 순서  (0) 2022.09.03

댓글