문제 : https://www.acmicpc.net/problem/14499
해당 문제는 시뮬레이션 문제로 문제 상황을 그대로 프로그래밍으로 옮기는 과정이 중요하다.
주사위를 굴릴 때마다 각 면이 어떻게 움직이는 지를 이해하고, 문제 상황을 정확히 이해하면 풀 수 있다.
단, 문제의 주어진 조건들을 정확히 읽고 놓치지 않아야 한다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 동서북남, 주사위
int dx[5] = { 0,0,0,-1,1 };
int dy[5] = { 0,1,-1,0,0 };
int dice[7];
int mp[20][20];
int main() {
// 입력받기
int n, m, x, y, l;
cin >> n >> m;
cin >> x >> y >> l;
// map
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> mp[i][j];
// main
while (l--) {
// 움직일 방향
int k;
cin >> k;
// 이동
int nx = x + dx[k];
int ny = y + dy[k];
// 조건 검사
if (nx >= n || nx < 0 || ny >= m || ny < 0)
continue; // 넘어가기
// 동
if (k == 1) {
int temp = dice[1];
dice[1] = dice[4];
dice[4] = dice[6];
dice[6] = dice[3];
dice[3] = temp;
}
// 서
else if (k == 2) {
int temp = dice[1];
dice[1] = dice[3];
dice[3] = dice[6];
dice[6] = dice[4];
dice[4] = temp;
}
// 남
else if (k == 3) {
int temp = dice[1];
dice[1] = dice[5];
dice[5] = dice[6];
dice[6] = dice[2];
dice[2] = temp;
}
// 북
else if (k == 4) {
int temp = dice[1];
dice[1] = dice[2];
dice[2] = dice[6];
dice[6] = dice[5];
dice[5] = temp;
}
// 해당 위치의 값이 0이면
if (mp[nx][ny] == 0)
mp[nx][ny] = dice[6];
// 0이 아니라면
else {
dice[6] = mp[nx][ny];
mp[nx][ny] = 0;
}
// 출력
x = nx, y = ny;
cout << dice[1] << "\n";
}
}
'Archived(CSE Programming) > 알고리즘(C++)' 카테고리의 다른 글
백준 14503_로봇 청소기 (0) | 2019.10.16 |
---|---|
백준 14891_톱니바퀴 (0) | 2019.10.15 |
프로그래머스_입국심사 (2) | 2019.10.09 |
프로그래머스_섬 연결하기 (0) | 2019.10.09 |
프로그래머스_NQueen (0) | 2019.10.09 |