삼성 SW 역량 테스트 / 삼성 코딩테스트
문제 링크
C++ 풀이
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <int> dice_sides = { 0, 0, 0, 0, 0, 0}; //주사위 각 면의 숫자
int N, M, x, y, K, input;
cin >> N >> M >> x >> y >> K;
vector <vector <int>> board(N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> input;
board[i].push_back(input);
}
}
for (int i = 0; i < K; i++) {
cin >> input;
if (input == 1) { //동
if (y < M - 1) {
y++;
int temp = dice_sides[0];
dice_sides[0] = dice_sides[3];
dice_sides[3] = dice_sides[5];
dice_sides[5] = dice_sides[2];
dice_sides[2] = temp;
if (board[x][y] == 0) { //이동한 칸에 쓰여 있는 수가 0인 경우
board[x][y] = dice_sides[5];
}
else {
dice_sides[5] = board[x][y];
board[x][y] = 0;
}
cout << dice_sides.front() << endl; //주사위 윗 면의 수 출력
}
}
else if (input == 2) { //서
if (y > 0) {
y--;
int temp = dice_sides[0];
dice_sides[0] = dice_sides[2];
dice_sides[2] = dice_sides[5];
dice_sides[5] = dice_sides[3];
dice_sides[3] = temp;
if (board[x][y] == 0) { //이동한 칸에 쓰여 있는 수가 0인 경우
board[x][y] = dice_sides[5];
}
else {
dice_sides[5] = board[x][y];
board[x][y] = 0;
}
cout << dice_sides.front() << endl; //주사위 윗 면의 수 출력
}
}
else if (input == 3) { //북
if (x > 0) {
x--;
int temp = dice_sides[0];
dice_sides[0] = dice_sides[4];
dice_sides[4] = dice_sides[5];
dice_sides[5] = dice_sides[1];
dice_sides[1] = temp;
if (board[x][y] == 0) { //이동한 칸에 쓰여 있는 수가 0인 경우
board[x][y] = dice_sides[5];
}
else {
dice_sides[5] = board[x][y];
board[x][y] = 0;
}
cout << dice_sides.front() << endl; //주사위 윗 면의 수 출력
}
}
else if (input == 4) { //남
if (x < N - 1) {
x++;
int temp = dice_sides[0];
dice_sides[0] = dice_sides[1];
dice_sides[1] = dice_sides[5];
dice_sides[5] = dice_sides[4];
dice_sides[4] = temp;
if (board[x][y] == 0) { //이동한 칸에 쓰여 있는 수가 0인 경우
board[x][y] = dice_sides[5];
}
else {
dice_sides[5] = board[x][y];
board[x][y] = 0;
}
cout << dice_sides.front() << endl; //주사위 윗 면의 수 출력
}
}
}
return 0;
}
각 방향으로 회전할 때, 주사위 전개도에서 각 자리 위치 변화를 그대로 적용하여 풀었다.
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[백준 10769번] 행복한지 슬픈지 (0) | 2021.04.25 |
---|---|
[백준 13458번] 시험 감독 (0) | 2021.04.23 |
[프로그래머스] 예상 대진표 (0) | 2021.04.22 |
[프로그래머스] 음양 더하기 (0) | 2021.04.22 |
[프로그래머스] 괄호 회전하기 (0) | 2021.04.21 |