https://www.acmicpc.net/problem/14499
#include <stdio.h>
int dy[4] = {0, 0, -1, 1};
int dx[4] = {1, -1, 0, 0};
int N, M, Y, X, K;
int map[20][20], order[1000]; int dice[5][4]; int tmp[5][4];
void input(){
scanf("%d %d %d %d %d",&N, &M, &Y, &X, &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", order + i); order[i]--; };
}
void roll(int n){
if (n == 1){
tmp[1][2] = dice[1][2]; tmp[3][2] = dice[3][2];
tmp[2][1] = dice[2][2]; tmp[2][2] = dice[2][3]; tmp[2][3] = dice[4][2];
tmp[4][2] = dice[2][1];
for (int j = 1; j <= 4; j++) {
for (int k = 1; k <= 3; k++){
dice[j][k] = tmp[j][k];
}
}
}
else if (n == 2) {
tmp[1][2] = dice[1][2]; tmp[3][2] = dice[3][2];
tmp[2][1] = dice[4][2]; tmp[2][2] = dice[2][1]; tmp[2][3] = dice[2][2];
tmp[4][2] = dice[2][3];
for (int j = 1; j <= 4; j++) {
for (int k = 1; k <= 3; k++){
dice[j][k] = tmp[j][k];
}
}
}
else if (n == 3) {
tmp[1][2] = dice[4][2];
for (int i = 1; i <= 3; i++) tmp[i + 1][2] = dice[i][2];
for (int i = 1; i <= 4; i++) dice[i][2] = tmp[i][2];
}
else {
tmp[4][2] = dice[1][2];
for (int i = 2; i <= 4; i++) tmp[i - 1][2] = dice[i][2];
for (int i = 1; i <= 4; i++) dice[i][2] = tmp[i][2];
}
}
void solve(){
for (int i = 0; i < K; i++) {
if (Y + dy[order[i]] >= 0 && Y + dy[order[i]] < N && X + dx[order[i]] >= 0 && X + dx[order[i]] < M) {
Y = Y + dy[order[i]]; X = X + dx[order[i]];
roll(order[i] + 1);
if (!map[Y][X]) map[Y][X] = dice[2][2];
else {
dice[2][2] = map[Y][X];
map[Y][X] = 0;
}
printf("%d\n", dice[4][2]);
}
}
}
int main(void) {
input(); solve();
return 0;
}
|
cs |
'설명없음' 카테고리의 다른 글
백준 16234: 인구 이동 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
---|---|
백준 14891: 톱니바퀴 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
백준 16236: 아기 상어 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
백준 14921: 용액 합성하기 [C/C++] (0) | 2022.06.08 |
백준 1484: 다이어트 [C/C++] (0) | 2022.06.08 |