[BOJ] 15685.드래곤커브 (Python)
by 뚜부니
15685번: 드래곤 커브
첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커
www.acmicpc.net
드래곤 커브는 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)
블로그의 정보
개발하는 두부
뚜부니