[BOJ] 15685.드래곤커브 (Python)
by 뚜부니
드래곤 커브는 x = 행, y = 열, d = 방향, g = 세대로 이루어져있습니다.
0세대는 길이가 1인 선분이고, 1세대는 0세대를 시게방향으로 90도 돌려서 끝점에 붙인 형태입니다.
이런 식으로 g세대는 (g-1)세대를 시계방향으로 90도 돌린 후 끝점에 붙이며 진행됩니다.
즉, g세대를 알려면 그 전 세대에 대해 거꾸로 이어붙인 형태입니다.
방향은 다음과 같이 주어집니다.
- 0: x좌표가 증가하는 방향 (→)
- 1: y좌표가 감소하는 방향 (↑)
- 2: x좌표가 감소하는 방향 (←)
- 3: y좌표가 증가하는 방향 (↓)
크기가 1×1인 정사각형의 네 꼭짓점이 모두 드래곤 커브의 일부인 것의 개수를 출력합니다.
# 드래곤 커브
import sys
input = sys.stdin.readline
def curve(x, y, d, g) :
curve_list = [d] # 이동 방향 리스트
for _ in range(g) :
curve_len = len(curve_list)
for i in range(curve_len-1, -1, -1) :
curve_list.append((curve_list[i]+1)%4)
matrix[x][y] = 1
for c in curve_list :
x, y = x + dist[c][0], y + dist[c][1]
if matrix[x][y] == 0 : matrix[x][y] = 1
return matrix
if __name__=="__main__" :
matrix = [[0]*101 for _ in range(101)]
N = int(input())
dist = [(1, 0), (0, -1), (-1, 0), (0, 1)]
for _ in range(N) :
x, y, d, g = map(int, input().split())
matrix = curve(x, y, d, g)
cnt = 0
for r in range(100) :
for c in range(100) :
if matrix[r][c] and matrix[r][c+1] and matrix[r+1][c] and matrix[r+1][c+1] :
cnt += 1
print(cnt)
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 5052.전화번호 목록 (Java) (0) | 2021.04.30 |
---|---|
[BOJ] 11720.숫자의 합 (Java) (0) | 2021.04.27 |
[BOJ] 17406.배열돌리기4 (0) | 2021.04.22 |
[BOJ] 15686.치킨배달 (Python) (0) | 2021.04.22 |
[BOJ] 17140.이차원배열과 연산 (Python) (0) | 2021.04.21 |
블로그의 정보
개발하는 두부
뚜부니