chldkato

백준 15685 드래곤 커브 (파이썬) 본문

백준

백준 15685 드래곤 커브 (파이썬)

chldkato 2020. 4. 14. 16:35

https://www.acmicpc.net/problem/15685

 

15685번: 드래곤 커브

첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커브의 시작 점, d는 시작 방향, g는 세대이다. (0 ≤ x, y ≤ 100, 0 ≤ d ≤ 3, 0 ≤ g ≤ 10) 입력으로 주어지는 드래곤 커브는 격자 밖으로 벗어나지 않는다. 드래곤 커브는 서로 겹칠 수 있다. 방향은 0, 1, 2,

www.acmicpc.net

이동방향을 리스트에 저장했을 때, 리스트의 맨 뒤부터 시작해서 (방향 + 1) % 4 의 방향으로 진행하는 규칙이다

예를 들어서 [1,2,3,2]가 저장되있으면 다음 세대 이동방향은 [3,0,3,2] 이다

 

1. x, y가 0부터 100까지 이므로 좌표를 101까지 설정한다

2. x, y, d, g를 입력받고 move 리스트에 이동 방향을 저장한다

3. 앞서 말한 규칙대로 모든 세대의 이동방향을 move에 저장한다

4. move에 저장한 이동방향을 하나씩 불러와서 이동한다

5. 모든 드래곤 커브가 완성되면 4개의 꼭지점이 드래곤 커브인 1x1 정사각형의 개수를 구한다

import sys

input = sys.stdin.readline
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]

n = int(input())
a = [[0]*101 for _ in range(101)]
for _ in range(n):
    x, y, d, g = map(int, input().split())
    a[x][y] = 1
    move = [d]
    for _ in range(g):
        temp = []
        for i in range(len(move)):
            temp.append((move[-i-1] + 1) % 4)
        move.extend(temp)
    for i in move:
        nx = x + dx[i]
        ny = y + dy[i]
        a[nx][ny] = 1
        x, y = nx, ny

ans = 0
for i in range(100):
    for j in range(100):
        if a[i][j]:
            if a[i+1][j] and a[i][j+1] and a[i+1][j+1]:
                ans += 1
print(ans)

'백준' 카테고리의 다른 글

백준 15683 감시 (파이썬)  (0) 2020.04.16
백준 15684 사다리 조작 (파이썬)  (0) 2020.04.15
백준 15686 치킨 배달 (파이썬)  (0) 2020.04.14
백준 5373 큐빙 (파이썬)  (0) 2020.04.14
백준 5213 과외맨 (파이썬)  (0) 2020.04.12
Comments