개발하는 두부

[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)
 

'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

블로그의 정보

개발하는 두부

뚜부니

활동하기