일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- DenseDepth
- 조합
- 왕실의기사대결
- 수영대회결승전
- ISER
- 마법의숲탐색
- ros
- 이진탐색
- 싸움땅
- 시뮬레이션
- 삼성기출
- dfs
- 토끼와 경주
- 루돌프의반란
- 마이크로프로세서
- BFS
- 코드트리빵
- Calibration
- 포탑부수기
- 슈퍼컴퓨터클러스터
- 백준
- 순서대로방문하기
- ARM
- 코드트리
- DP
- 나무박멸
- ICER
- 3Dreconstruction
- 구현
- 소프티어
Archives
- Today
- Total
from palette import colorful_colors
[백준] 15685 드래곤 커브 with 파이썬 본문
점기준 회전으로 풀었다
모든 점들은 체커라는 리스트에 표시해서 나중에 정사각형 계산할때 더 빠르게 계산할 수 있도록 했다
import sys
input = sys.stdin.readline
N = int(input())
start_curbs = [list(map(int, input().split())) for _ in range(N)] # 시작점, 시작방향, 세대
checker = [[0 for _ in range(101)] for _ in range(101)]
curbs = []
dx = [1, 0, -1, 0] # 우상좌아
dy = [0, -1, 0, 1]
# a, b를 기준으로 x, y가 90도 회전
def rotate(a, b, x, y):
x_tmp, y_tmp = x - a, y - b
rotate_x, rotate_y = -y_tmp, x_tmp
rotate_x, rotate_y = a + rotate_x, b + rotate_y
return rotate_x, rotate_y
# def checker
for start_curb in start_curbs:
current_curbs = []
current_curbs.append((start_curb[0], start_curb[1]))
direction = start_curb[2]
start_point = (start_curb[0], start_curb[1])
for i in range(start_curb[3] + 1): # 세대마다
if i == 0: # 0세대인경우
current_curbs.append((start_curb[0] + dx[direction], start_curb[1] + dy[direction]))
end_point = (start_curb[0] + dx[direction], start_curb[1] + dy[direction]) # 맨 처음 끝점
else:
new_curbs = []
for curb in current_curbs:
rotate_x, rotate_y = rotate(end_point[0], end_point[1], curb[0], curb[1])
new_curbs.append((rotate_x, rotate_y))
# curb 채우기
for new_curb in new_curbs:
if new_curb not in current_curbs:
current_curbs.append(new_curb)
# 끝점 찾기
end_point_x , end_point_y = rotate(end_point[0], end_point[1], start_point[0], start_point[1])
end_point = (end_point_x, end_point_y)
# 체커에 표시하기
for point in current_curbs:
checker[point[0]][point[1]] = 1
# print(curbs) # (0,0부터 99,99까지)
count = 0
for i in range(100):
for j in range(100):
if checker[i][j] * checker[i+1][j] * checker[i][j+1] * checker[i+1][j+1]:
count += 1
print(count)
'알고리즘 > 알고리즘 with 파이썬' 카테고리의 다른 글
[알고리즘 with C++] 입출력 (0) | 2024.01.10 |
---|---|
[백준] 1932 정수 삼각형 with 파이썬 (0) | 2023.11.13 |
[코드트리] 메이즈러너 with 파이썬 (0) | 2023.10.14 |
[백준] 23288 주사위 굴리기 2 with 파이썬 (0) | 2023.10.12 |
[백준] 16236 아기 상어 with 파이썬 (0) | 2023.10.12 |