-
[BOJ] #14503 _ 로봇 청소기Problem Solving/BOJ 2019. 8. 28. 21:28
[로봇 청소기] https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음
www.acmicpc.net
시뮬레이션 문제이다.
주어진 조건대로 구현하면 된다.
[ 소스 코드 ]
#include <cstdio> #include <algorithm> #define MAX 100 using namespace std; int dx[] = { 0, 1, 0, -1 }, dy[] = { -1, 0, 1, 0 }; int map[MAX][MAX]; int N, M, r, c, d; int solve(); int main() { scanf("%d %d", &N, &M); scanf("%d %d %d", &r, &c, &d); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) scanf("%d", &map[i][j]); } printf("%d\n", solve()); return 0; } int solve() { int i, tmp_r, tmp_c, clean = 0; while (1) { if (map[r][c] == 0) { map[r][c] = 2; clean++; } for (i = 0; i < 4; i++) { if (d == 0) d = 3; else d -= 1; tmp_r = r + dy[d]; tmp_c = c + dx[d]; if (map[tmp_r][tmp_c] == 0) { r = tmp_r; c = tmp_c; break; } } if (i >= 4) { //go to back r += (dy[d] * -1); c += (dx[d] * -1); if (map[r][c] == 1) break; } } return clean; }
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] #14891 _ 톱니바퀴 (0) 2019.08.28 [BOJ] #14888 _ 연산자 끼워넣기 (0) 2019.08.28 [BOJ] #14501 _ 퇴사 (0) 2019.08.28 [BOJ] #14499 _ 주사위 굴리기 (0) 2019.08.28 [BOJ] #2644 _ 촌수계산 (0) 2019.08.28 댓글