-
백준 14503번 : 로봇 청소기 (C언어)c c++ 언어 공부 2023. 3. 20. 00:06
https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽
www.acmicpc.net
Code:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112#include <stdio.h>int main(void) {int n, m;scanf("%d %d", &n, &m);int arr[51][51] = { 0, };int r, c, d;scanf("%d %d %d", &r, &c, &d);int i, j;for (i = 0; i < n; i++){for (j = 0; j < m; j++){scanf("%d", &arr[i][j]);}}while (1){if (arr[r][c] == 0){arr[r][c] = 2;}if (d == 0){if (arr[r-1][c] != 0 && arr[r+1][c] != 0 && arr[r][c-1] != 0 && arr[r][c+1] != 0){if (arr[r + 1][c] == 1){break;}r += 1;}else{d = 3;if (arr[r][c - 1] == 0){c -= 1;}}}else if (d == 1){if (arr[r - 1][c] != 0 && arr[r + 1][c] != 0 && arr[r][c - 1] != 0 && arr[r][c + 1] != 0){if (arr[r][c - 1] == 1){break;}c -= 1;}else{d = 0;if (arr[r - 1][c] == 0){r -= 1;}}}else if (d == 2){if (arr[r - 1][c] != 0 && arr[r + 1][c] != 0 && arr[r][c - 1] != 0 && arr[r][c + 1] != 0){if (arr[r - 1][c] == 1){break;}r -= 1;}else{d = 1;if (arr[r][c + 1] == 0){c += 1;}}}else if (d == 3){if (arr[r - 1][c] != 0 && arr[r + 1][c] != 0 && arr[r][c - 1] != 0 && arr[r][c + 1] != 0){if (arr[r][c + 1] == 1){break;}c += 1;}else{d = 2;if (arr[r + 1][c] == 0){r += 1;}}}}int count = 0;for (i = 0; i < n; i++){for (j = 0; j < m; j++){if (arr[i][j] == 2){count++;}}}printf("%d", count);}cs 문제 풀이 :
간단하게 할 수 있는 구현문제이다.
1. 동 서 남 북을 입력으로 받으므로 경우의 수를 크게 4가지로 나누었다.
2. 그 다음 주변 4칸이 청소되지않은 빈칸이 없는 경우와 4칸 중 청소되지않은 빈칸이 있는 경우로 나누었다.
3. 문제에 있는 조건에 따라서 구현한다.
'c c++ 언어 공부' 카테고리의 다른 글
백준 15894번 : 수학은 체육과목 입니다. (C언어) (0) 2023.03.20 백준 25206번 : 너의 평점은 (C언어) (0) 2023.03.20 백준 1085번 : 직사각형에서 탈출 (C언어) (2) 2023.03.17 백준 10250번 : ACM 호텔 (C언어) (0) 2023.03.16 백준 4153번 : 직각 삼각형(C언어) (0) 2023.03.16