문제 링크: https://www.acmicpc.net/problem/14503
설명에 맞게 그냥 구현하기만 하면 된다.
방향에 유의할 것
#include <bits/stdc++.h>
using namespace std;
int dir_x[4] = {0, 1, 0, -1};
int dir_y[4] = {-1, 0, 1, 0};
int state[50][50];
int main() {
int n, m;
scanf("%d %d", &n, &m);
int cur_x, cur_y, dir;
scanf("%d %d %d", &cur_y, &cur_x, &dir);
for (int y = 0; y < n; y++) {
for (int x = 0; x < m; x++) {
scanf("%d", &state[y][x]);
}
}
int ret = 0;
while (true) {
if (state[cur_y][cur_x] == 0) {
ret++;
state[cur_y][cur_x] = 2;
}
bool keep = false;
for (int i = 1; i <= 4; i++) {
int new_x = cur_x + dir_x[(dir + 4 - i) % 4];
int new_y = cur_y + dir_y[(dir + 4 - i) % 4];
if (new_x < 0 || new_y < 0 || new_x == m || new_y == n) {
continue;
}
if (state[new_y][new_x] == 0) {
dir = (dir + 4 - i) % 4;
cur_x = new_x;
cur_y = new_y;
keep = true;
break;
}
}
if (!keep) {
int new_x = cur_x + dir_x[(dir + 2) % 4];
int new_y = cur_y + dir_y[(dir + 2) % 4];
if (new_x < 0 || new_y < 0 || new_x == m || new_y == n) {
break;
}
if (state[new_y][new_x] == 1) {
break;
}
cur_x = new_x;
cur_y = new_y;
}
}
printf("%d", ret);
return 0;
}
'Problem Solving > Baekjoon Online Judge' 카테고리의 다른 글
제1회 블롭컵 (0) | 2022.03.01 |
---|---|
#2749 피보나치 수 (0) | 2022.01.10 |
#2933 미네랄 (0) | 2022.01.08 |
#15683 감시 (0) | 2022.01.06 |
#14809 경사로 (0) | 2022.01.05 |
댓글