Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- c++
- 정렬
- 그래프
- 백준
- 수학
- Unreal Engine 5
- VR
- 재귀
- 유니티
- DFS
- 누적 합
- 다익스트라
- 투 포인터
- 구현
- 다이나믹 프로그래밍
- 백트래킹
- ue5
- 시뮬레이션
- 알고리즘
- 브루트포스
- 우선순위 큐
- 유니온 파인드
- XR Interaction Toolkit
- 자료구조
- BFS
- 트리
- 문자열
- Team Fortress 2
- 스택
- 그리디 알고리즘
Archives
- Today
- Total
1일1알
백준 14499번 주사위 굴리기 C++ 본문
주사위의 정보를 담는 구조체를 만들어서 주사위 굴리는 것을 시뮬레이션 하면서 문제를 해결하였다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
using namespace std;
using ll = long long;
int dRow[5] = { 0,0,0,-1,1 };
int dCol[5] = { 0,1,-1,0,0 };
struct Dice {
int x;
int y;
int up;
int down;
int left;
int right;
int front;
int back;
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m, x, y, k;
cin >> n >> m >> x >> y >> k;
vector<vector<int>> board(n, vector<int>(m));
vector<int> order(k);
Dice dice = { x,y,0,0,0,0,0,0 };
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> board[i][j];
}
}
for (int i = 0; i < k; i++) {
cin >> order[i];
}
for (int i = 0; i < k; i++) {
int dir = order[i];
int nextRow = dice.x + dRow[dir];
int nextCol = dice.y + dCol[dir];
if (nextRow < 0 || nextRow >= n) continue;
if (nextCol < 0 || nextCol >= m) continue;
Dice lastDice = { dice.x,dice.y,dice.up,dice.down,dice.left,dice.right,dice.front,dice.back };
if (dir == 1) {
dice.up = lastDice.left;
dice.down = lastDice.right;
dice.left = lastDice.down;
dice.right = lastDice.up;
}
else if (dir == 2) {
dice.up = lastDice.right;
dice.down = lastDice.left;
dice.left = lastDice.up;
dice.right = lastDice.down;
}
else if (dir == 3) {
dice.up = lastDice.back;
dice.down = lastDice.front;
dice.front = lastDice.up;
dice.back = lastDice.down;
}
else if (dir == 4) {
dice.up = lastDice.front;
dice.down = lastDice.back;
dice.front = lastDice.down;
dice.back = lastDice.up;
}
dice.x = nextRow;
dice.y = nextCol;
if (board[dice.x][dice.y] == 0) {
board[dice.x][dice.y] = dice.down;
}
else {
dice.down = board[dice.x][dice.y];
board[dice.x][dice.y] = 0;
}
cout << dice.up << "\n";
}
};
'알고리즘' 카테고리의 다른 글
백준 10867번 중복 빼고 정렬하기 C++ (0) | 2022.05.10 |
---|---|
백준 14890번 경사로 C++ (0) | 2022.05.09 |
백준 1817번 짐 챙기는 숌 C++ (0) | 2022.05.06 |
백준 2116번 주사위 쌓기 C++ (0) | 2022.05.05 |
백준 1756번 피자 굽기 C++ (0) | 2022.05.03 |