문제 링크 : https://www.acmicpc.net/problem/14503
시뮬레이션 문제였다.
문제에서 하라는대로 해서 풀었다.
청소한 칸은 지도에 2로 표시하고 청소가 종료된 후 마지막에 값이 2인 칸의 수를 세어 출력하였다.
소스코드
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 n, m, y, x, drec, cnt=0; int map[50][50]; int dy[] = { -1,0,1,0 }; int dx[] = { 0,1,0,-1 }; void clean() { while (true) { //1.현재 위치 청소 map[y][x] = 2; //모든방향 봄. int ny, nx; bool clearPossible = false; for (int i = 0; i < 4; i++) { ny = y + dy[i]; nx = x + dx[i]; if (map[ny][nx] == 0) clearPossible = true; } // 청소불가 if (clearPossible == false) { int rd = (drec + 2) % 4; ny = y + dy[rd]; nx = x + dx[rd]; //벽 if (map[ny][nx] == 1) { break; } else { y = ny; x = nx; continue; } } else { //왼쪽 봄. if (drec == 0) drec = 3; else drec--; ny = y + dy[drec]; nx = x + dx[drec]; if (map[ny][nx] == 0) { y = ny; x = nx; } continue; } } } int main() { cin >> n >> m >> y >> x >> drec; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cin >> map[i][j]; clean(); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (map[i][j] == 2) cnt++; } } cout << cnt; } | cs |
'Algorithm > 백준' 카테고리의 다른 글
백준 14889번 스타트와 링크 (0) | 2019.04.28 |
---|---|
백준 14890번 경사로 (0) | 2019.04.28 |
백준 14888번 연산자 끼워넣기 (0) | 2019.04.27 |
백준 14500번 테트로미노 (0) | 2019.04.26 |
백준 13460번 구슬 탈출 2 (0) | 2019.03.08 |