티스토리 뷰

/*

★시뮬레이션 방법사용★


★비슷 다른 문제★


거울 2344, 2151

거울2 2347

빛의 왕과 거울의 미로1

빛의 왕과 거울의 미로2

금고회사

*/


#include <cstdio>

#include <cstring>

#include <vector>

using namespace std;

int dx[] = { 1, -1, 0, 0 };

int dy[] = { 0, 0, 1, -1 };

int a[1000][1000];

bool c[1000][1000];

// 0 = 아래, 1 = 위, 2 = 오른쪽, 3 = 왼쪽

int change_dir(int dir, int mirror) {

if (mirror == 1) { // 좌측 하단으로 45도

  // 0 -> 3, 1 -> 2, 2 -> 1, 3 -> 0

return 3 - dir;

}

else { // 우측 하단으로 45도

  // 0 -> 2, 1 -> 3, 2 -> 0, 3 -> 1

return (dir + 2) % 4;

}

}

int main() {

int t;

scanf("%d", &t);

for (int tc = 1; tc <= t; tc++) {

int n;

scanf("%d", &n);

for (int i = 0; i<n; i++) {

for (int j = 0; j<n; j++) {

scanf("%1d", &a[i][j]);

c[i][j] = false;

}

}

int row, col, dir;

row = 0;

col = 0;

dir = 2;

// dir

// 0 = 아래, 1 = 위, 2 = 오른쪽, 3 = 왼쪽

while (0 <= row && row < n && 0 <= col && col < n) {

if (a[row][col] != 0) {

c[row][col] = true;

dir = change_dir(dir, a[row][col]);

}

row += dx[dir];

col += dy[dir];

}

int ans = 0;

for (int i = 0; i<n; i++) {

for (int j = 0; j<n; j++) {

if (c[i][j]) {

ans += 1;

}

}

}

printf("Case #%d\n", tc);

printf("%d\n", ans);

}


return 0;

}

'프로그래밍 > 알고리즘' 카테고리의 다른 글

개구리 뛰기(codeground)  (0) 2016.11.26
균일수(codeground)  (0) 2016.11.26
편집 거리 알고리즘 및 LCS문제  (0) 2016.11.26
위상정렬로 문제풀기  (0) 2016.11.22
소수의 곱(우선순위 큐)  (0) 2016.11.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함