반응형
https://www.acmicpc.net/problem/14499
14499번: 주사위 굴리기
첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지
www.acmicpc.net
1. 문제설명
주사위를 굴려서 이동시키는 과정을 잘 구현하는게 핵심인 문제다.
2
4 1 3
5
6
문제에서 주는 이 전개도를 잘 관찰해야 한다.
이렇게 주사위가 있을 때
주사위는 6칸이므로 6칸에 어떤 숫자가 저장되는지
int 배열 arr[6]에 해당 면에 있는 숫자를 저장할 수 있다.
항상 맨윗면은 1번, 동쪽을 보는 면은 3번 이런식으로 주사위의 면을 고정한 채로
주사위를 굴리는 행위를 할 때마다
각 면에 저장된 숫자를 서로 바꿔주면 주사위를 굴리는 행위를 구현할 수 있다.
[2]
0
[4] [1] [3] [6]
0 0 0 0
[5]
0
[6]
0
위 전개도를 기준으로 주사위의 배열 방이 [1]번부터 [6]까지 있고
그 안에 해당하는 값이 있으면
주사위를 굴릴 때마다 해당 값들을 바꿔주면 된다.
[6]번은 주사위의 아랫면에 해당하므로
동서로 굴릴 때나 남북으로 굴릴때나 변환되어야 한다.
2.문제풀이코드 C++
#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, k;
int arr[21][21];
int dice[7];
void copy_ground() {
if (arr[x][y] == 0) {
arr[x][y] = dice[6];
}
else {
dice[6] = arr[x][y];
arr[x][y] = 0;
}
cout << dice[1] << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> x >> y >> k;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> arr[i][j];
}
}
int order;
for (int i = 0; i < k; i++) {
cin >> order;
if (order == 1) {
if (y + 1 < m) {
y++;
int tmp = dice[1];
dice[1] = dice[4];
dice[4] = dice[6];
dice[6] = dice[3];
dice[3] = tmp;
copy_ground();
}
}
else if (order == 2) {
if (y - 1 >= 0) {
y--;
int tmp = dice[1];
dice[1] = dice[3];
dice[3] = dice[6];
dice[6] = dice[4];
dice[4] = tmp;
copy_ground();
}
}
else if (order == 3) {
if (x - 1 >= 0) {
x--;
int tmp = dice[2];
dice[2] = dice[1];
dice[1] = dice[5];
dice[5] = dice[6];
dice[6] = tmp;
copy_ground();
}
}
else if (order == 4) {
if (x + 1 < n) {
x++;
int tmp = dice[1];
dice[1] = dice[2];
dice[2] = dice[6];
dice[6] = dice[5];
dice[5] = tmp;
copy_ground();
}
}
}
return 0;
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 16500번 : 문자열 판별 - DP C++ (0) | 2022.03.06 |
---|---|
백준 2294번 : 동전 2 - dp C++ (0) | 2022.03.05 |
백준 10971번 : 외판원 순회 2 - 비트마스킹 BFS C++ (0) | 2022.03.04 |
백준 3780번 : 네트워크 연결 - Union&Find dis-joint set C++ (0) | 2022.03.03 |
백준 17398번 : 통신망 분할 - Union & Find dis-joint set 알고리즘 C++ (0) | 2022.03.02 |