-
백준 14499 주사위 굴리기Algorithm/구현(Brute force, Back tracking, etc.) 2021. 11. 9. 12:14728x90
- 삼성 SW 기출문제에서도 쉬운 편에 속하는 문제이다. 꼭 맞추고 들어가야 하는 문제라 생각.
- 핵심적인 부분은, 주사위가 다음 칸으로 이동할 때 이동 가능한 범위인지를 체크하는 것과, 주사위의 각 면들의 값을 하나의 배열로 관리하고 동,서,남,북으로 이동시 각 면의 값이 어떻게 변하는 지를 잘 반영하면 된다.
#include <iostream> int square[7]; int map[20][20]; using namespace std; int dx[] = {0,0,-1,1}; int dy[] = {1,-1,0,0}; int main() { int N, M,x,y,k; cin >> N >> M >> x >> y >> k; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> map[i][j]; } } int direction; while (k--) { cin >> direction; int nx = x + dx[direction - 1]; int ny = y + dy[direction - 1]; if (nx < 0 || ny < 0 || nx >= N || ny >= M) continue; int temp = square[1]; if (direction == 1) { square[1] = square[4]; square[4] = square[6]; square[6] = square[3]; square[3] = temp; } else if (direction == 2) { square[1] = square[3]; square[3] = square[6]; square[6] = square[4]; square[4] = temp; } else if (direction == 3) { square[1] = square[5]; square[5] = square[6]; square[6] = square[2]; square[2] = temp; } else if (direction == 4) { square[1] = square[2]; square[2] = square[6]; square[6] = square[5]; square[5] = temp; } if (map[nx][ny]) { square[6] = map[nx][ny]; map[nx][ny] = 0; } else { map[nx][ny] = square[6]; } x = nx; y = ny; cout << square[1] << '\n'; } return 0; }
'Algorithm > 구현(Brute force, Back tracking, etc.)' 카테고리의 다른 글
백준 14501 퇴사 (0) 2021.11.11 백준 14500 테트로미노 (0) 2021.11.09 백준 13458 시험 감독 (0) 2021.11.05 백준 3190 뱀 (0) 2021.11.04 [Codility - Counting Elements] MaxProductOfThree (0) 2021.09.19