Problem
Problem URL : 주사위 굴리기
[1] Answer Code (18. 10. 19)
#include<iostream>
#include<vector>
#define p pair<int,int>
using namespace std;
// 동 서 북 남
int dx[] = {0,0,0,-1,1};
int dy[] = {0,1,-1,0,0};
int dice[7] = {0,0,0,0,0,0,0};
void roll_dice(int dir){
int tmp_dice[7];
for(int i=1; i<=6; i++){
tmp_dice[i] = dice[i];
}
if( dir == 1){ // 동
dice[1] = tmp_dice[6];
dice[3] = tmp_dice[5];
dice[5] = tmp_dice[1];
dice[6] = tmp_dice[3];
}
else if( dir == 2){ // 서
dice[1] = tmp_dice[5];
dice[3] = tmp_dice[6];
dice[5] = tmp_dice[3];
dice[6] = tmp_dice[1];
}
else if( dir == 3){ // 북
dice[1] = tmp_dice[2];
dice[2] = tmp_dice[3];
dice[3] = tmp_dice[4];
dice[4] = tmp_dice[1];
}
else { // 남
dice[1] = tmp_dice[4];
dice[2] = tmp_dice[1];
dice[3] = tmp_dice[2];
dice[4] = tmp_dice[3];
}
}
int map[25][25];
int n,m;
bool inRange(int x, int y){
if(x < 0 || x >= n || y < 0 || y >= m)
return false;
return true;
}
void change_dice(int x, int y, int dice_idx){
if(map[x][y] == 0)
map[x][y] = dice[dice_idx];
else{
dice[dice_idx] = map[x][y];
map[x][y] = 0;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
int x, y;
cin >> x >> y ;
int tc;
cin >> tc;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin >> map[i][j];
for(int i=0; i<tc; i++){
int dir;
cin >> dir;
x += dx[dir];
y += dy[dir];
if(! inRange(x, y)){
x -= dx[dir];
y -= dy[dir];
continue;
}
/*
1 : 동쪽
2 : 서쪽
3 : 북쪽
4 : 남쪽
주사위 Index
위 : 1
앞 : 2
바닥 : 3
뒤 : 4
오른쪽 : 5
왼쪽 : 6
*/
if(dir == 1){ // 바뀌는 면 : 오른쪽
change_dice(x, y, 5);
}
else if (dir == 2){ // 바뀌는 면 : 왼쪽
change_dice(x, y, 6);
}
else if (dir == 3){ // 바뀌는 면 : 뒤
change_dice(x, y, 4);
}
else if (dir == 4){ // 바뀌는 면 : 앞
change_dice(x, y, 2);
}
roll_dice(dir);
cout << dice[1] << endl;
}
return 0;
}
Review
-
삼성 역량 테스트 기출 문제
-
닥치고 하드코딩
-
1시간 넘게 소요
-
TC 맞았는데 결과값을 잘못봐서 디버깅하느라 시간이 더 소요됐다.
-
머리로 주사위 굴리는데 안돌아가서 너무 힘들었다.