알고리즘/BOJ

[삼성SW테스트] 드래곤 커브

남현경 2018. 8. 6. 21:29

 

 

#include 
#include 
#include 

using namespace std;

int N, x, y, d, g, cnt = 0;
bool visited[101][101];
int dx[4] = {1,0,-1,0};
int dy[4] = {0,-1,0,1};
vector V[11];

void init() {
	for (int i = 0; i <= 100; i++) {
		for (int j = 0; j <= 100; j++) {
			visited[i][j] = false;
		}
	}
}
void solve() {
	visited[x][y] = true;
	for (int i = 0; i < V[g].size(); i++) {
		x += dx[(V[g].at(i) + d) % 4];	y += dy[(V[g].at(i) + d) % 4];
		visited[x][y] = true;
	}
}

void find() {
	for (int i = 0; i < 100; i++) {
		for (int j = 0; j < 100; j++) {
			if (visited[i][j] && visited[i + 1][j] && visited[i][j + 1] && visited[i + 1][j + 1]) {
				cnt++;
			}
		}
	}
}
int main() {
	init();
	V[0].push_back(0);
	for (int i = 1; i < 11; i++) {
		for (int j = 0; j < V[i-1].size(); j++) 
			V[i].push_back(V[i-1].at(j));
		for( int j = V[i-1].size()-1; j>=0; j--)
			V[i].push_back((V[i - 1].at(j) + 1)%4);
	}

	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> x >> y >> d >> g;
		solve();
	}
	find();
	cout << cnt;

	return 0;
}

2018-08-06 스터디에서 푼 문제! 삼성 역테 기출 드래곤 커브 이번년도 상반기 문제였다.

 

시뮬레이션 문제를 풀 때는 우선적으로 규칙을 찾아야 한다. 시계 방향으로 90도 씩 회전한다는 것을 기억하면서 방향성을 가진 배열을 만들면 끝!인 문제였다.. 너무 허무한 문제..

이번 문제에서는 벡터의 인덱스를 가지고 이것저것 해보는 방법과 dx, dy처럼 자주나오는 방향성을 가지고 풀었다.

자주 나오는 문제 유형이므로 꼭 다시 한 번 봐보기!!!