-
[BOJ] #14499 _ 주사위 굴리기Problem Solving/BOJ 2019. 8. 28. 21:19
[주사위 굴리기] https://www.acmicpc.net/problem/14499
주어진 주사위 도면도의 숫자가 동쪽, 서쪽, 북쪽, 남쪽으로 이동할 때 동일한 규칙으로 변경된다.
주사위의 방향에 따른 변경되는 규칙을 파악하면 된다.
[ 주사위 이동 규칙 ]
알아낸 규칙을 이용하여 하드코딩 하였다.
[ 소스 코드 ]
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int dx[5] = { 0, 1, -1, 0, 0 }, dy[5] = { 0, 0, 0, -1, 1 }; int N, M, map[21][21]; int K, dir[1001], dice[7]; pair<int, int> dice_init; void solve(); int main() { scanf("%d %d %d %d %d", &N, &M, &dice_init.first, &dice_init.second, &K); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) scanf("%d", &map[i][j]); } for (int i = 0; i < K; i++) scanf("%d", &dir[i]); solve(); return 0; } void solve() { int tmp_dice[7] = { 0, }; dice[1] = map[dice_init.first][dice_init.second]; for (int i = 0; i < K; i++) { dice_init.first += dy[dir[i]]; dice_init.second += dx[dir[i]]; if (dice_init.first < 0 || dice_init.second < 0 || dice_init.first >= N || dice_init.second >= M) { dice_init.first -= dy[dir[i]]; dice_init.second -= dx[dir[i]]; continue; } switch (dir[i]) { case 1: tmp_dice[4] = dice[1]; tmp_dice[1] = dice[3]; tmp_dice[6] = dice[4]; tmp_dice[3] = dice[6]; tmp_dice[2] = dice[2]; tmp_dice[5] = dice[5]; break; case 2: tmp_dice[3] = dice[1]; tmp_dice[6] = dice[3]; tmp_dice[1] = dice[4]; tmp_dice[4] = dice[6]; tmp_dice[2] = dice[2]; tmp_dice[5] = dice[5]; break; case 3: tmp_dice[5] = dice[1]; tmp_dice[1] = dice[2]; tmp_dice[6] = dice[5]; tmp_dice[2] = dice[6]; tmp_dice[3] = dice[3]; tmp_dice[4] = dice[4]; break; case 4: tmp_dice[2] = dice[1]; tmp_dice[6] = dice[2]; tmp_dice[1] = dice[5]; tmp_dice[5] = dice[6]; tmp_dice[3] = dice[3]; tmp_dice[4] = dice[4]; break; } memcpy(dice, tmp_dice, sizeof(int) * 7); memset(tmp_dice, 0, sizeof(int) * 7); if (map[dice_init.first][dice_init.second] == 0) map[dice_init.first][dice_init.second] = dice[1]; else { dice[1] = map[dice_init.first][dice_init.second]; map[dice_init.first][dice_init.second] = 0; } printf("%d\n", dice[6]); } }
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] #14503 _ 로봇 청소기 (0) 2019.08.28 [BOJ] #14501 _ 퇴사 (0) 2019.08.28 [BOJ] #2644 _ 촌수계산 (0) 2019.08.28 [BOJ] #2468 _ 안전 영역 (0) 2019.08.28 [BOJ] #3190 _ 뱀 (0) 2019.08.12 댓글