const int x[] = {0, -1, 0, 1};
const int y[] = {-1, 0, 1, 0};
int main() {
int N, M, r, c, d, room[52][52] = {0,}, ans = 0;
scanf("%d %d", &N, &M);
scanf("%d %d %d", &r, &c, &d);
for (int n=1; n<=N; n++) {
for (int m=1; m<=M; m++) {
scanf("%d", &room[n][m]);
room[n][m] ^= 1;
} // 0 : wall, 1 : empty, 2 : cleaned
}
r++;
c++;
while (1) {
if (room[r][c] == 1) {
room[r][c] = 2;
ans++;
} // condition 1
if (room[r+x[0]][c+y[0]]-1 && room[r+x[1]][c+y[1]]-1 && room[r+x[2]][c+y[2]]-1 && room[r+x[3]][c+y[3]]-1) {
if (room[r+x[(d+3)%4]][c+y[(d+3)%4]]==0) break;
r+=x[(d+3)%4];
c+=y[(d+3)%4];
} // condition 2-3 & 2-4
else if (room[r+x[d]][c+y[d]]%2 == 0) {
d=(d+3)%4;
} // condition 2-2
else {
r+=x[d];
c+=y[d];
d=(d+3)%4;
} // condition 2-1
}
printf("%d", ans);
}
visit 배열을 굳이 만들 필요가 없어서 청소한 곳은 2로 바꿔줬어.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.