-
15685_드래곤커브알고리즘/simulation 2020. 1. 29. 09:29
링크 https://www.acmicpc.net/problem/15685
접근
map에 드래곤 커브를 그려나간다
대칭인 커브를 만들기 위해 기존에 생성된 방향의 역순대로 커브를 추가해나간다
방향
0 1 2 3
R U L D
example
0 R U
1 U L
2 L D
3 U L
R U L U L D L U
0 미만 혹은 100 이상의 영역엔 커브를 구하지 않는다
양 4방향이 1로 칠해지면 지사각형 1개의 꼭지점이 모두 드래곤 커브로
둘러 쌓인 것으로 규정한다
#include <iostream> #include <vector> #define MAX 101 using namespace std; int dy[4] {0, -1, 0, 1}; int dx[4] {1, 0, -1, 0}; int map[MAX][MAX]; int main(int argc, const char * argv[]) { int n, x, y, d, g, nd; scanf("%d", &n); for(int i = 0 ; i < n ; i++){ scanf("%d %d %d %d", &x, &y, &d, &g); vector<int>directions; directions.push_back(d); for(int gen = 0 ; gen < g ; gen++){ for(int idx = directions.size()-1 ; idx >= 0 ; idx--){ nd = (directions[idx] + 1) % 4; directions.push_back(nd); } } map[y][x] = 1; for(int d : directions){ y += dy[d]; x += dx[d]; if(y < 0 || y >= MAX || x < 0 || x >= MAX){ continue; } map[y][x] = 1; } } int ret = 0; for(int y = 0 ; y < MAX ; y++){ for(int x = 0 ; x < MAX ; x++){ if(map[y][x] == 1 && map[y][x+1] == 1 && map[y+1][x] == 1 && map[y+1][x+1] == 1){ ret++; } } } printf("%d \n", ret); return 0; }
'알고리즘 > simulation' 카테고리의 다른 글
백준_1057 토너먼트 (0) 2020.01.29 1094_막대기 (0) 2020.01.28