알고리즘/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처럼 자주나오는 방향성을 가지고 풀었다.
자주 나오는 문제 유형이므로 꼭 다시 한 번 봐보기!!!