BOJ 15685: 드래곤 커브 작성일 2020-02-15 https://www.acmicpc.net/problem/15685 2월동안 187문제 풀기(지난달 누적 87개) (25/187) 문제를 잘읽자를 10번 복창한다. 어이없게 사면이 모두 면으로 막혀있는 경우를 찾는줄 알고, grid 자료구조를 만들고 삽질을 엄청나게 함. 4점 모두 찍혀있는 경우는 훨씬 더 간단하게 풀 수 있음 1234567891011121314151617181920212223242526272829303132333435363738394041#include <bits/stdc++.h> using namespace std; int N; const int SZ = 100; int board[SZ+1][SZ+1]; const int dx[4] = {1, 0,-1, 0}; const int dy[4] = {0,-1, 0, 1}; int curve[1024] = {0,1}; void makeCurve() { for(int i = 1; i < 10; i++) { int a = 1 << i; int b = 3 << (i-1); for(int j = 0; j < b-a; j++) { curve[a+j] = (2+curve[j])%4; curve[b+j] = curve[b-a+j]; } } } int main() { makeCurve(); cin >> N; for(int i = 0; i < N; i++) { int x, y, d, g; cin >> x >> y >> d >> g; board[x][y] = 1; for(int j = 0; j < 1<<g; j++) { int dir = (d + curve[j])%4; x += dx[dir], y += dy[dir]; board[x][y] = 1; } } int ans = 0; for(int i = 0; i < SZ; i++) for(int j = 0; j < SZ; j++) ans += (board[i][j] && board[i][j+1] && board[i+1][j] && board[i+1][j+1]); cout << ans; }