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
#include <bits/stdc++.h>
//[C++] 백준 삼성 SW 역량 테스트 기출문제
int n, m, y, x, k;
int map[20][20];
int cmd[1000];
enum {
U,
E,
W,
N,
S,
D
};
// 위 동 서 북 남 아래
int dice[6];
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> m >> y >> x >> k;
for (int i = 0; i < n; ++i){
for (int j = 0; j < m; ++j){
std::cin >> map[i][j];
}
}
for (int i = 0; i < k; ++i){
std::cin >> cmd[i];
}
for (int i = 0; i < k; ++i){
/*
동쪽으로 갈 때
위-->동
서-->위
아래-->서
동-->아래
*/
if (cmd[i] == 1){
if (x + 1 >= m) continue;
++x;
int temp = dice[U];
dice[U] = dice[W];
dice[W] = dice[D];
dice[D] = dice[E];
dice[E] = temp;
}
/*
서쪽으로 갈 때
위-->서
서-->아래
아래-->위
아래-->동
*/
else if (cmd[i] == 2) {
if (x - 1 < 0) continue;
--x;
int temp = dice[U];
dice[U] = dice[E];
dice[E] = dice[D];
dice[D] = dice[W];
dice[W] = temp;
}
/*
북쪽으로 갈 때
위-->북
북-->아래
아래-->남
남-->위
*/
else if (cmd[i] == 3) {
if (y - 1 < 0) continue;
--y;
int temp = dice[U];
dice[U] = dice[S];
dice[S] = dice[D];
dice[D] = dice[N];
dice[N] = temp;
}
/*
남쪽으로 갈 때
위-->남
남-->아래
북-->위
아래-->북
*/
else {
if (y + 1 >= n) continue;
++y;
int temp = dice[U];
dice[U] = dice[N];
dice[N] = dice[D];
dice[D] = dice[S];
dice[S] = temp;
}
std::cout << dice[U] << '\n';
// 아래 처리
if (map[y][x] == 0){
map[y][x] = dice[D];
}
else {
dice[D] = map[y][x];
map[y][x] = 0;
}
}
return 0;
}
'삼성 SW 역량 테스트 기출문제' 카테고리의 다른 글
[C++] 삼성 SW 역량 테스트 기출문제 백준 15686 - 치킨 배달 (0) | 2023.07.11 |
---|---|
[C++] 삼성 SW 역량 테스트 기출문제 백준 15683번 - 감시 (0) | 2023.07.11 |
[C++] 삼성 SW 역량 테스트 기출문제 백준 14891번 - 톱니바퀴 (0) | 2023.07.11 |
[C++] 삼성 SW 역량 테스트 기출문제 백준 14503번 - 로봇 청소기 (0) | 2023.07.10 |
[C++] 삼성 SW 역량 테스트 기출문제 백준 13460번 - 구슬 탈출 2 (0) | 2023.07.05 |