-
[C++] 백준 14499 | 주사위 굴리기Problem Solving/Baekjoon 2023. 4. 8. 17:36
주사위 굴리기
✍🏻 풀이
단순 구현 문제였다. 연습장에 주사위를 그려가며 풀면 간단하게 해결할 수 있음 😀
1. 주사위 배열을 선언한 후, 다음과 같이 임의로 인덱스에 위치를 부여하였다.
* 0: 위 * 1: 뒤 * 2: 아래 * 3: 앞 * 4: 왼쪽 * 5: 오른쪽
2. 주사위를 동, 서, 남, 북으로 굴렸을 때의 위치를 각각 함수로 구현하였다. (아래는 동쪽으로 굴렸을 때의 함수)
void rollEast() { int tmp = dice[0]; dice[0] = dice[4]; dice[4] = dice[2]; dice[2] = dice[5]; dice[5] = tmp; }
3. 명령이 들어오면 동, 서, 남, 북으로 굴려주고 아래와 같은 공통 로직을 실행한다.
(* 문제에서 1, 2, 3, 4에 맞는 명령은 동, 서, 남, 북이 아니고 동, 서, 북, 남인 점을 주의해야 한다)
if (diceMap[x][y] == 0) { diceMap[x][y] = dice[2]; } else { dice[2] = diceMap[x][y]; diceMap[x][y] = 0; } cout << dice[0] << '\n';
끝!
✅ Accept Code
#include <bits/stdc++.h> using namespace std; int N, M, x, y, K; int dice[6]; int diceMap[20][20]; /* * 0: 위 * 1: 뒤 * 2: 아래 * 3: 앞 * 4: 왼쪽 * 5: 오른쪽 */ void rollEast() { int tmp = dice[0]; dice[0] = dice[4]; dice[4] = dice[2]; dice[2] = dice[5]; dice[5] = tmp; } void rollWest() { int tmp = dice[0]; dice[0] = dice[5]; dice[5] = dice[2]; dice[2] = dice[4]; dice[4] = tmp; } void rollSouth() { int tmp = dice[0]; dice[0] = dice[1]; dice[1] = dice[2]; dice[2] = dice[3]; dice[3] = tmp; } void rollNorth() { int tmp = dice[0]; dice[0] = dice[3]; dice[3] = dice[2]; dice[2] = dice[1]; dice[1] = tmp; } int main() { cin >> N >> M >> x >> y >> K; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> diceMap[i][j]; } } while (K--) { int op; cin >> op; switch (op) { case 1: if (y + 1 > M - 1) continue; rollEast(); y++; if (diceMap[x][y] == 0) { diceMap[x][y] = dice[2]; } else { dice[2] = diceMap[x][y]; diceMap[x][y] = 0; } cout << dice[0] << '\n'; break; case 2: if (y - 1 < 0) continue; rollWest(); y--; if (diceMap[x][y] == 0) { diceMap[x][y] = dice[2]; } else { dice[2] = diceMap[x][y]; diceMap[x][y] = 0; } cout << dice[0] << '\n'; break; case 3: if (x - 1 < 0) continue; rollNorth(); x--; if (diceMap[x][y] == 0) { diceMap[x][y] = dice[2]; } else { dice[2] = diceMap[x][y]; diceMap[x][y] = 0; } cout << dice[0] << '\n'; break; case 4: if (x + 1 > N - 1) continue; rollSouth(); x++; if (diceMap[x][y] == 0) { diceMap[x][y] = dice[2]; } else { dice[2] = diceMap[x][y]; diceMap[x][y] = 0; } cout << dice[0] << '\n'; break; } } }
728x90'Problem Solving > Baekjoon' 카테고리의 다른 글
[C++] 백준 3190번 | 뱀 (0) 2023.06.13 [C++] 백준 12100 | 2048(Easy) (0) 2023.06.11 [C++] 백준 14502번 | 연구소 (0) 2023.04.08 [C++] 백준 1911번 | 흙길 보수하기 (0) 2023.04.06 [C++] 백준 14888번 | 연산자 끼워넣기 (0) 2023.03.30