ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 14499 주사위 굴리기
    Algorithm/구현(Brute force, Back tracking, etc.) 2021. 11. 9. 12:14
    728x90

    - 삼성 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

    댓글

Designed by Tistory.