Search
Duplicate

주사위 굴리기

주차
0
문제번호
14499
언어
티어
골드
유형
구현
시뮬레이션
nj_Blog
nj_상태
완료
이해도
풀이
사람
이해도 2
13 more properties

Memo

구현 문제는 문제를 빠르게 이해하는게 핵심이라는 것을 다시 한 번 느꼈습니다.
주사위의 상태를 어떻게 변화시킬지에 대한 고민이 이 문제에서 핵심이라 생각합니다.

Code

제출 날짜

@3/24/2021

메모리

2024 KB

시간

0 ms
#include <iostream> #define endl "\n" int g_map[21][21]; int command[1001]; int x, y; int N, M, K; int dx[5] = {0, 0, 0, -1, 1}; // ind 0 padding int dy[5] = {0, 1, -1, 0, 0}; int left, right, up, down, front, back; void input_faster() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { input_faster(); std::cin >> N >> M >> x >> y >> K; for (int i = 0 ; i < N ; i++) for(int j = 0 ; j < M ; j++) std::cin >> g_map[i][j]; for (int i = 0 ; i < K ; i++) std::cin >> command[i]; left = right = up = down = front = back = 0; } void move_east() { int tmp, tmp2, tmp3; tmp = right; tmp2 = down; tmp3 = left; right = up; down = tmp; left = tmp2; up = tmp3; } void move_west() { int tmp, tmp2, tmp3; tmp = left; tmp2 = down; tmp3 = right; left = up; down = tmp; right = tmp2; up = tmp3; } void move_north() { int tmp, tmp2, tmp3; tmp = back; tmp2 = down; tmp3 = front; back = up; down = tmp; front = tmp2; up = tmp3; } void move_south() { int tmp, tmp2, tmp3; tmp = front; tmp2 = down; tmp3 = back; front = up; down = tmp; back = tmp2; up = tmp3; } void move_dice(int dir) { if (dir == 1) // 동 move_east(); else if (dir == 2)//서 move_west(); else if (dir == 3)//북 move_north(); else if (dir == 4) move_south(); } void solve() { int dir, m_x, m_y; for (int i = 0 ; i < K ; i++) { dir = command[i]; m_x = x + dx[dir]; m_y = y + dy[dir]; if (m_x < 0 || m_x >= N || m_y < 0 || m_y >= M) continue; move_dice(dir); x = m_x; y = m_y; if (g_map[x][y] != 0) { down = g_map[x][y]; g_map[x][y] = 0; } else if (!g_map[x][y]) g_map[x][y] = down; std::cout << up << endl; } } int main() { input(); solve(); return (0); }
C++
복사