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 | 31 |
Tags
- 다리 만들기2
- 알고리즘
- 1182
- 색종이 붙이기
- 괄호추가하기
- 6603
- 부분수열의 합
- 14502
- 장고
- 구슬탈출2
- 17136
- 16637
- 따라하기
- 인스타
- 14888
- 17144
- Ajax
- 인스타그램
- 좋아요
- 9095
- 17472
- 댓글
- Java
- 재귀
- 백준
- 로또
- django
- 연산자 끼워넣기
- 미세먼지 안녕!
- 17143
Archives
- Today
- Total
Be a developer
백준 14499 주사위 굴리기 본문
삼성 코딩 테스트를 치고 와서 다시 마음을 다잡고 알고리즘을 공부하기 시작했다.
하루에 2문제 이상 꼭 꾸준히 푸는 것을 목표로 해야 겠다.
시뮬레이션 문제는 조건에 따라 풀기만 하면 되지만, c++ 숙련도를 높이는 좋은 방법이라고 생각한다.
이번 문제도 시뮬레이션 문제로서, 문제를 잘 이해하고 그에 맞춰 코딩을 하면 된다.
하지만 항상 그렇듯이 바로 코딩을 시작하지 않고, 먼저 생각을 한 후 코딩을 시작했다.
문제를 푸는 핵심은 방향에 따라서 이동하는 코드를 쉽게 하도록 dr, dc 배열을 두는 것이 하나 있다.(dr, dc의 인덱스를 문제에 주어진 방향과 맞추면 더 편하다.)
다음으로 주사위를 돌릴 때, 주사위의 값들을 이어서 바꿔주는 것이다. 4가지 방향이 있으므로, 각각 함수를 만들어 주어서, 코드를 조금 보기 쉽게 해주었다.
아래는 코드이다.
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 78 79 80 81 82 83 84 85 86 87 88 | #include <iostream> using namespace std; int n, m, x, y, k; int map[20][20]; int ju[6]; //동:1, 서:2, 북:3, 남:4 이기 때문에 그 순서대로 세팅 int dr[4] = { 0,0,-1,1 }; int dc[4] = { 1,-1,0,0 }; void right() { int temp = ju[3]; ju[3] = ju[0]; ju[0] = ju[2]; ju[2] = ju[1]; ju[1] = temp; } void left() { int temp = ju[3]; ju[3] = ju[1]; ju[1] = ju[2]; ju[2] = ju[0]; ju[0] = temp; } void up() { int temp = ju[4]; ju[4] = ju[1]; ju[1] = ju[5]; ju[5] = ju[0]; ju[0] = temp; } void down() { int temp = ju[5]; ju[5] = ju[1]; ju[1] = ju[4]; ju[4] = ju[0]; ju[0] = temp; } int main() { cin >> n >> m >> x >> y >> k; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%d", &map[i][j]); } } for (int i = 0; i < k; i++) { int dir; scanf("%d", &dir); int nr = x + dr[dir - 1]; int nc = y + dc[dir - 1]; if (nc < 0 || nc >= m || nr < 0 || nr >= n)continue; switch (dir) { //동 case 1: right(); break; //서 case 2: left(); break; //북 case 3: up(); break; //남 case 4: down(); } if (map[nr][nc] == 0) { map[nr][nc] = ju[1]; } else { ju[1] = map[nr][nc]; map[nr][nc] = 0; } /*출력(디버깅) printf("\n%d번 째\n",i+1); for (int j = 0; j < 6; j++) { printf("%d ", ju[j]); } printf("\n"); */ x = nr; y = nc; printf("%d\n", ju[0]); } return 0; } | cs |
Comments