[백준/C++] 로봇청소기_14503

leeact·2023년 5월 21일
1

[백준/c++]

목록 보기
11/24
post-thumbnail

📝 문제

https://www.acmicpc.net/problem/14503

💻 코드

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int n, m;
int arr[50][50] = { 0, };
int nowX, nowY, d;
// 북 0 동 1 남 2 서 3  
int dr[4] = { -1, 0, 1, 0};
int dc[4] = { 0, 1, 0, -1 };
int cnt = 0;


int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> n >> m;
	cin >> nowX >> nowY >> d;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> arr[i][j];
		}
	}

	while (1) {
		bool flag = true;
		// 1. 현재 칸 청소 안된거면 청소
		if (arr[nowX][nowY] == 0) {

			arr[nowX][nowY] = 2;
			cnt += 1;
		}

		// 주변 4칸 탐색!
		for (int i = 0; i < 4; i++) {
			int nextRow = nowX + dr[i];
			int nextCol = nowY + dc[i];

			if (arr[nextRow][nextCol] == 0) {
				flag = false;
				break;
			}
		}
		// 2. 주변 4칸이 다 청소 된 경우
		if (flag == true) {
			int nextRow = nowX + dr[(d + 2) % 4];
			int nextCol = nowY + dc[(d + 2) % 4];

			if (arr[nextRow][nextCol] == 1) {
				break;
			}
			else {
				nowX = nextRow;
				nowY = nextCol;
			}
		}
		else { // 3. 주변 4칸이 다 청소 안된 경우
			d = (d + 3) % 4;	// 반시계로 90도 회전
			int nextRow = nowX + dr[d % 4];
			int nextCol = nowY + dc[d % 4];
			if (arr[nextRow][nextCol] == 0) {
				nowX = nextRow;
				nowY = nextCol;
			}
		}
	}
	
	
	cout << cnt;

	return 0;
}

💡 Point

와 진짜 문제 반시계 90도를 그냥 90도로 보고 인생 손해봤다...

2개의 댓글

comment-user-thumbnail
2023년 5월 22일

벌써 로봇청소기를 푸시네요?;; 터틀봇 문제도 쫌 풀어보시지ㅎㅋㅋㅋㅋㅋ

1개의 답글