그럴듯한 개발 블로그
article thumbnail
반응형

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

 

2116번: 주사위 쌓기

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

www.acmicpc.net

요즘 문제 풀이 귀찮아서 안 올리는데 화딱지 나서 올린다.

주사위 잘 보면 (0,5) (1,3), (2,4) 다 하하 진짜 어이가없네

구현 자체는 굳이 map으로 두지 않아도 인덱스 계산으로 충분히 가능하다. 근데 내 비루한 두뇌론 헷갈려서 걍 밀고 매 층마다 map 따로 두어서 해결했다.

압도적인 메모리 사용량

// 주사위 쌓기

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
// (0, 5), (1, 3), (2, 4) 한 쌍임

vector<vector<int> > board;
vector<unordered_map<int, int> > vm;
int n, res = 0, cur_res = 0;

int dice[6] = {5, 3, 4, 1, 2, 0};

void f(int floor, int badak) {
	if (floor == n) {
		res = max(res, cur_res);
		return ;
	}
	int chunjang = vm[floor][badak];
	if (badak != 6 && chunjang != 6)
		cur_res += 6;
	else if (badak != 5 && chunjang != 5)
		cur_res += 5;
	else
		cur_res += 4;
	f(floor + 1, chunjang);
}

int main () {
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin >> n;
	board = vector(n, vector(6, 0));
	vm = vector(n, unordered_map<int, int>());

	for (int i = 0; i < n; i++){
		for (int j = 0; j < 6; j++) {
			cin >> board[i][j];
		}
		for (int j = 0; j < 6; j++) {
			vm[i][board[i][j]] = board[i][dice[j]];
		}
	}
	for (int i = 0; i < 6; i++) {
		cur_res = 0;
		f(0, board[0][i]);
	}
	cout << res;
}

 

반응형

'<algorithm> > 백준' 카테고리의 다른 글

백준 2580 스도쿠 c++  (1) 2023.12.15
백준 14430 자원 캐기 c++  (0) 2023.12.13
백준 1025 제곱수 찾기 c++  (0) 2023.11.28
백준 1013 Contact c++  (1) 2023.11.28
백준 12891 DNA 비밀번호 c++  (0) 2023.11.28
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!