티스토리 뷰
# 문제
https://www.acmicpc.net/problem/14499
# 풀이
이 문제는 시뮬레이션(문제에서 지시하는대로 코딩) 문제입니다.
위 문제의 핵심은 주사위 굴리기 와 굴릴때의 조건 맞추기 입니다.
- 주사위 굴리기 -
주사위는 배열을 만들어 주사위 칸을 만들었고, 문제에서 처음 주어진 주사위의 모양을 이용하였습니다.
2 4 1 3 5 6
위와 같이 배열의 1 번째가 무조건 위, 아래는 6 번째로 잡고 시작합니다.
동으로 갈때는, [1 -> 3] [3 -> 6] [6 -> 4] [4 -> 1] 로 바뀌게 되어 네개의 칸(1,3,4,6)만 한칸씩 밀리게 됩니다.
서는 그 반대며, 남과 북도 비슷하게 4칸(1,2,5,6)만 바꾸면 됩니다.
- 굴릴때의 조건 맞추기 -
해당 조건은 굉장히 맞추기 쉽습니다.
문제를 차근차근 읽으신 뒤에 푸신다면 금방 코딩 하실 수 있습니다.
나머지는 문제에 나온대로 따라가시면 굉장히 쉽게 풀 수 있습니다.
조심해야할 점은, 쉽게 넘기고 갈 수 있는 좌표에서 나옵니다.
저도 이 부분에서 한번 틀렸습니다....
문제를 자세하게 읽어보신 후에 푸시는 것을 추천 드립니다 :)
# 코드
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <iostream> using namespace std; int map[20][20] = {0, }; int dice[6] = {0,}; int dr[4] = {1,-1,0,0}; //동,서,북,남 int dc[4] = {0,0,-1,1}; void rotateDice(int dir) { //east if(dir == 1){ int temp = dice[0]; dice[0] = dice[3]; dice[3] = dice[5]; dice[5] = dice[2]; dice[2] = temp; } //west else if(dir == 2){ int temp = dice[0]; dice[0] = dice[2]; dice[2] = dice[5]; dice[5] = dice[3]; dice[3] = temp; } //north else if(dir == 3){ int temp = dice[0]; dice[0] = dice[4]; dice[4] = dice[5]; dice[5] = dice[1]; dice[1] = temp; } //south else { int temp = dice[0]; dice[0] = dice[1]; dice[1] = dice[5]; dice[5] = dice[4]; dice[4] = temp; } } int main(){ int N,M,x,y,K; cin >> N >> M >> x >> y >> K; for(unsigned int i = 0; i < N; i++){ for(unsigned int j = 0; j < M; j++){ cin >> map[i][j]; } } int dir; while(K > 0){ cin >> dir; //갈 수 있는지 확인 int nr = y + dr[dir-1]; int nc = x + dc[dir-1]; if(nr >= 0 && nr < M && nc >= 0 && nc < N){ rotateDice(dir); y = nr; x = nc; //문제 조건 if(map[x][y] == 0){ map[x][y] = dice[5]; }else{ dice[5] = map[x][y]; map[x][y] = 0; } cout << dice[0] << "\n"; } K--; } return 0; } |
'알고리즘 문제 풀이 > BOJ' 카테고리의 다른 글
[BOJ 3568] iSharp (0) | 2019.02.11 |
---|---|
[BOJ 15662] 톱니바퀴(2) (0) | 2019.02.10 |
[BOJ 16234] 인구 이동 (0) | 2018.10.25 |
[BOJ 16235] 나무 재테크 (0) | 2018.10.24 |
[BOJ 16236] 아기 상어 (0) | 2018.10.23 |