규칙 찾기가 중요한 문제
1세대 드래곤 커브가 (0,0)에서 그려질때, 방향을 나열하면
0,1
2세대 드래곤 커브의 경우엔
0,1,2,1
3세대 드래곤 커브의 경우
0,1,2,1,2,3,2,1
0,1,2,1과 2,3,2,1을 비교하면
0,1,2,1를 거꾸로 한 1,2,1,0에서
1을 추가하니 2,3,2,1이됨을 확인할 수 있다.
이 규칙을 찾으려면.. 음.....
코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include<stdio.h> #include<iostream> #include<vector> #include<queue> using namespace std; int map[101][101]; vector<pair<int, int>>dim; int n; deque<int>tmp; bool first; int dx[] = { 1,0,-1,0 }; int dy[] = { 0,-1,0,1 }; void makedir(int gen) { if (gen == 0) { return; } for (int i = tmp.size() - 1; i >= 0; i--) { int dir = tmp[i]; dir++; if (dir == 4) { dir = 0; } tmp.push_back(dir); } makedir(gen - 1); } int main() { //freopen("Text.txt", "r", stdin); cin >> n; for (int i = 0; i < n; i++) { first = true; int x, y, dir, gen; cin >> x >> y >> dir >> gen; tmp.clear(); tmp.push_back(dir); makedir(gen); map[x][y] = 1; for (int k = 0; k < tmp.size(); k++) { int nx = x + dx[tmp[k]]; int ny = y + dy[tmp[k]]; map[nx][ny] = 1; x = nx; y = ny; } } int ans = 0; for (int i = 0; i < 100; i++) { for (int j = 0; j < 100; j++) { if (map[i][j] == 1 && map[i + 1][j + 1] == 1 && map[i + 1][j] == 1 && map[i][j + 1] == 1) { ans++; } } } cout << ans << endl; } | cs |
'BOJ' 카테고리의 다른 글
백준 3568 / iSharp (0) | 2019.02.23 |
---|---|
백준 15686 / 치킨 배달 (0) | 2019.02.22 |
백준 2933 / 미네랄 (1) | 2019.02.21 |
백준 2422 / 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2019.02.20 |
백준 13458 / 시험 감독 (0) | 2019.02.20 |