728x90
반응형
https://www.acmicpc.net/problem/14499
문제 해결 방법
주사위가 굴려질 때 마다 윗면을 어떻게 체크할까 하다가 위, 앞, 오른쪽을 표시하는 포인터를 구현하기로 했다.
그러면 주사위가 굴려질 때 마다 인덱스가 오른쪽처럼 변하게 된다
전체 코드
#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, k;
int mapp[21][21];
int plan[1001];
int dx[] = {0, 0, 0, -1, 1}; // 동, 서, 북, 남
int dy[] = {0, 1, -1, 0, 0};
int dice[7];
void input(){
cin >> n >> m >> x >> y >> k;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin >> mapp[i][j];
}
}
for(int i=0; i<k; i++){
cin >> plan[i];
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
input();
int top = 1, front = 2, right = 3;
for(int i=0; i<k; i++){
int dir = plan[i];
x += dx[dir]; // 주사위 이동
y += dy[dir];
if(x<0 || x>=n || y<0 || y>=m){
x -= dx[dir]; // 원래 위치로
y -= dy[dir];
continue;
}
if(dir == 1){ // 주사위 굴리기
int temp = top;
top = 7 - right;
right = temp;
} else if(dir ==2){
int temp = top;
top = right;
right = 7-temp;
} else if(dir == 3){
int temp = top;
top = front;
front = 7 - temp;
} else {
int temp = front;
front = top;
top = 7 - temp;
}
if(mapp[x][y] == 0){
mapp[x][y] = dice[7 - top];
} else {
dice[7-top] = mapp[x][y];
mapp[x][y] = 0;
}
cout << dice[top] << '\n';
}
return 0;
}
728x90
반응형
'알고리즘 > 시뮬레이션 & 구현' 카테고리의 다른 글
[백준/구현/C++] 17281번 야구* (0) | 2023.02.07 |
---|---|
[백준/구현/C++] 15685번 드래곤 커브 * (0) | 2023.01.27 |
[백준/구현/C++] 21610번 마법사 상어와 비바라기 (삼성 SW 역량 테스트 기출) (0) | 2023.01.22 |
[백준/구현/C++] 21608번 상어 초등학교 (삼성 SW 역량 테스트 기출) * (0) | 2023.01.21 |
[백준/구현/C++] 13458번 시험 감독 (삼성 SW 역량 테스트 기출) (2) | 2023.01.18 |