일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터축소
- 딥러닝
- MLE
- 과적합방지
- 프로그래머스 2차원동전뒤집기 파이썬
- 2차원동전뒤집기
- AI경량화
- 로지스틱 최대우도
- 카카오 코테 메뉴리뉴얼
- 프로그래머스 누적합
- 인공신경망 학습
- 광고삽입 파이썬
- 딥러닝학습
- 비트마스킹
- k겹 교차검증
- 머신러닝 학습 검증
- 카카오 메뉴리뉴얼
- 스타수열 파이썬
- 확률과우도
- 스타수열
- 프로그래머스
- 인공지능 경진대회
- 프로그래머스광고삽입
- 프로그래머스 스타수열
- 프로그래머스 2차원동전뒤집기
- 메뉴리뉴얼 파이썬
- 자율성장 인공지능
- 모델경량화
- 딥러닝 가중치 갱신
- 딥러닝파라미터
- Today
- Total
머신러닝 개발자의 러닝머신
15685: 드래곤 커브 (Python) 본문
<문제 유형> : 규칙 찾기
- 이 문제의 낯선 점은 도형의 회전과 도형을 만들어가는 과정의 규칙을 찾아 구현하는 것이다.
- 이때 생각해야 하는 것은 도형의 회전을 이 도형을 이루는 선분들의 회전으로 치환하는 것이다.
시계 방향으로 90도 회전했을때 방향을 가진 선분들은 다음과 같이 변환된다.
→ ☞ ↑
← ☞ ↓
↑ ☞ ←
↓ ☞ →
- 그리고 다음 세대의 드래곤 커브가 될 때 끝점부터 다시 이어 붙여 선분을 curve 리스트에 차례로 추가하게 되는데, 그림과 같이 0, 1, 2, 3의 순서대로 선분이 추가 된다. 따라서 다음 세대의 선분을 그릴 때 앞선 세대의 드래곤 커브 리스트의 인자를 배열의 마지막 인덱스부터 거꾸로 순으로 이어붙여 만들어 짐을 유의해야 한다.

<구현해야 하는 것>
dr_map : (101, 101) 의 크기를 갖는 격자 이중배열, 각 요소에는 드래곤 커브의 꼭짓점의 존재 여부를 저장한다.
드래곤 커브의 좌표에 해당하면 True, 아니면 False를 담고 있다.
curve: g세대의 드래곤 커브의 선분을 저장하는 리스트
dragon_curve() : curve 리스트에 담긴 선분을 리스트의 역순의 요소들부터 90도 회전시켜가며 차례로 curve에 추가해 드래곤 커브를 그리는 함수
(1) g에 해당하는 dargon curve 리스트 완성
: g 만큼 반복문 돌면서 curve리스트에 드래곤 좌표 추가
(2) 완성된 curve를 참조해 dr_map에 좌표 해당 여부를 저장
(3) 출력 result 연산
: (1,1) 크기의 정사각형의 좌표가 모두 드래곤 커브의 좌표에 해당하면 result +1 해줌
dr_map = [[False for _ in range(101)] for _ in range(101)]
# right, up, left, down
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
n = int(input())
def dragon_curve(lst):
for i in range(len(lst)-1,-1, -1):
d = lst[i]
d += 1
d %= 4
lst.append(d)
return lst
for _ in range(n):
y, x, d, g = map(int, input().split()) # 문제의 x, y 축을 반대로 입력받아 행 축을 x축, 열 축을 y축으로 함
#(1) dragon curve 완성
curve = []
curve.append(d)
for i in range(1, g+1):
curve = dragon_curve(curve)
#(2) dragon curve를 dr_map에 그리기
dr_map[x][y] = True
for dir in curve:
x += dx[dir]
y += dy[dir]
if not dr_map[x][y]:
dr_map[x][y] = True
#(3)result 출력
result = 0
for i in range(100):
for j in range(100):
if dr_map[i][j] and dr_map[i][j+1] and dr_map[i+1][j] and dr_map[i+1][j+1]:
result += 1
print(result)
'알고리즘 > boj' 카테고리의 다른 글
[백준 8980] 택배 (Python) (0) | 2023.01.11 |
---|---|
1655: 가운데를 말해요 (Python) (0) | 2022.07.28 |
12865: 평범한 배낭 (Python) (0) | 2022.07.27 |
14891: 톱니바퀴 (Python) (0) | 2022.07.27 |
16639: 괄호 추가하기 3 (0) | 2022.07.16 |