https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRF8s6ezEDFAUo&
시뮬레이션 문제였습니다.
구슬 위치와 방향마다 다르기 때문에 반복문을 통해 완전탐색 시켜줬습니다.
자세한건 코드에 주석으로 설명했습니다.
#include <iostream>
using namespace std;
int n, result, sx, sy;
int map[101][101];
int dx[] = { -1,1,0,0 };//상하좌우
int dy[] = { 0,0,-1,1 };
int block[6][4] = { {0,0,0,0},{1,3,0,2},{3,0,1,2},{2,0,3,1},{1,2,3,0},{1,0,3,2} };//블록만났을때 방향
struct Wormhole {
int x1;
int y1;
int x2;
int y2;
}wormhole[11];
bool wormCheck[11];
void start(int x, int y, int dir, int cnt) {
int nx = x;
int ny = y;
while (1) {
nx += dx[dir];
ny += dy[dir];
if (map[nx][ny] == -1) break;//블랙홀
else if (nx == sx && ny == sy) break;//시작지점
else if (map[nx][ny] >= 1 && map[nx][ny] <= 5) {//블록
start(nx, ny, block[map[nx][ny]][dir], cnt + 1);
break;
}
else if (map[nx][ny] >= 6 && map[nx][ny] <= 10) {//wormHole
if (nx == wormhole[map[nx][ny]].x1&&ny == wormhole[map[nx][ny]].y1)
start(wormhole[map[nx][ny]].x2, wormhole[map[nx][ny]].y2, dir, cnt);
else start(wormhole[map[nx][ny]].x1, wormhole[map[nx][ny]].y1, dir, cnt);
break;
}
}
result = result > cnt ? result : cnt;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int test_case;
cin >> test_case;
for (int t = 1; t <= test_case; t++) {
//start
result = 0;
cin >> n;
for (int i = 6; i <= 10; i++) {//초기화
wormCheck[i] = false;
wormhole[i] = { 0, };
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> map[i][j];
if (map[i][j] >= 6 && map[i][j] <= 10) {//wormHole
if (wormCheck[map[i][j]] == false) {
wormhole[map[i][j]].x1 = i;
wormhole[map[i][j]].y1 = j;
wormCheck[map[i][j]] = true;
}
else {
wormhole[map[i][j]].x2 = i;
wormhole[map[i][j]].y2 = j;
}
}
}
}
for (int i = 0; i <= n + 1; i++) {//외곽 다 5로 셋팅
map[0][i] = 5;
map[i][0] = 5;
map[n + 1][i] = 5;
map[i][n + 1] = 5;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (map[i][j] == 0) {
for (int k = 0; k < 4; k++) {
sx = i;//start좌표 기록
sy = j;
start(i, j, k, 0);
}
}
}
}
cout << '#' << t << ' ' << result << '\n';
}
}
- 혼잣말
역시 시뮬… 집중력 조금이라도 떨어지면 망할거같아서 빡 집중했다.