https://www.acmicpc.net/problem/14499
먼저 주사위의 동, 서, 남, 북, 위, 아래를 배열 인덱스의 0~5까지로 대응시킨다.
명령을 하나씩 받아서, 먼저 이동할 수 있는지 판단한다. 동쪽이면 동쪽으로 벗어날 것이고, 남쪽이면 남쪽으로 벗어날 것이고 이런 식으로 확인할 수 있다.
지도를 벗어나지 않는다면, 명령에 맞춰서 주사위를 회전해주면 된다. 회전 방향에 따라 주사위의 상태를 갱신해주고, 주사위의 위치를 변경해준다.
이후에 조건에 맞게 출력을 해주면 된다.
#include<iostream> using namespace std; int dice[6]; int Row, Col, srcR, srcC, cnt, m[20][20]; void Move(int dir) { int temp; if (dir == 1) { //동쪽으로 굴릴 때 if (srcC + 1>= Col) return; //주사위 회전, 좌표 이동 //남2 북3 그대로 temp = dice[0]; dice[0] = dice[4]; dice[4] = dice[1]; dice[1] = dice[5]; dice[5] = temp; srcC++; } else if (dir == 2) { //서 if (srcC - 1 < 0) return; temp = dice[1]; dice[1] = dice[4]; dice[4] = dice[0]; dice[0] = dice[5]; dice[5] = temp; srcC--; } else if (dir == 3) { //북 if (srcR - 1 < 0) return; temp = dice[3]; dice[3] = dice[4]; dice[4] = dice[2]; dice[2] = dice[5]; dice[5] = temp; srcR--; } else { //남 if (srcR + 1 >= Row) return; temp = dice[2]; dice[2] = dice[4]; dice[4] = dice[3]; dice[3] = dice[5]; dice[5] = temp; srcR++; } if (m[srcR][srcC] == 0) { m[srcR][srcC] = dice[5]; } else { dice[5] = m[srcR][srcC]; m[srcR][srcC] = 0; } cout << dice[4] << '\n'; } int main(void) { cin >> Row >> Col >> srcR >> srcC >> cnt; for (int i = 0; i < Row; i++) { for (int j = 0; j < Col; j++) { cin >> m[i][j]; } } while (cnt--) { int op; cin >> op; Move(op); } return 0; }
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 13335번: 트럭 (C++) (0) | 2019.07.25 |
---|---|
백준 5014번: 스타트링크 (C++) (0) | 2019.07.24 |
백준 1547번: 공 (C++) (0) | 2019.07.24 |
백준 2146번: 다리 만들기 (C++) (0) | 2019.07.24 |
백준 1799번: 비숍 (C++) (0) | 2019.07.24 |