Algorithm/Python

[백준 15685] 드래곤 커브

🥭맹2 2021. 4. 18. 22:52

1. 문제

www.acmicpc.net/problem/15685

 

15685번: 드래곤 커브

첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커

www.acmicpc.net

2. 접근 방법

아 진짜 세대 이용해서 푸는게 진짜 진자 지ㄴ짜로 어려웠다

흑흑흑흑

 

너무 많은 시간을 지체해서 결국 이 블로그들을 참고했다.

https://rebas.tistory.com/793

 

BOJ 15685 · 드래곤 커브

알고리즘 분류 : 시뮬레이션  문제에 주어진 조건 그대로 드래곤 커브를 만들어서 사각형의 개수를 세는 문제다. 드래곤 커브를 만드는 규칙을 파악해야 한다. 드래곤 커브는 최대 10세대까지

rebas.kr

아니 근데 이분 왤케 잘 푸시죠 ^-^ 

완전 파이썬 너낌 나게 잘 푸셨슴다.

 

그리고 세대가 10까지인 것에 착안하여 미리 10세대까지 v행렬에 만들어놓고 그거 꺼내다가 쓰는ㄴ게 진짜 미쳤슴다;;;

swjeong.tistory.com/170

이 분의 문제 풀이에서 방향 전환의 규칙성을 이해할 수 있었다 8ㅅ8 ...

 

[BOJ 15685] 드래곤 커브

문제출처 https://www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정

swjeong.tistory.com

3. 코드

python

N = int(input())
# 영역 확인 해주기 귀찮으니까 101로 함
board = [[0]*101 for _ in range(101)]
dx, dy = (1, 0, -1, 0), (0, -1, 0, 1)
v = [0]
ans = 0

for i in range(1, 11):
    k = 1<<(i-1)
    for j in range(k):
        v.append((v[k-j-1]+1)%4)

for _ in range(N):
    x, y, d, g = map(int, input().split())
    board[y][x] = 1
    for i in range(1<<g):
        x, y = x+dx[(v[i]+d)%4], y+dy[(v[i]+d)%4]
        board[y][x] = 1

for y in range(100):
    for x in range(100):
        if board[y][x] and board[y+1][x] and board[y][x+1] and board[y+1][x+1]:
            ans += 1

print(ans)

4. 마치며

아직 온전히 내 것으로 만들었다고는 보기 힘들지만 !

그래도 흐름을 잡았으니 다시 풀 때는 꼭 내 손으로 풀기 !@!@!@

'Algorithm > Python' 카테고리의 다른 글

[백준 5373] 큐빙  (0) 2021.04.19
[백준 15683] 감시  (0) 2021.04.18
[백준 14891] 톱니바퀴  (0) 2021.04.18
[백준 14889] 스타트와 링크  (0) 2021.04.18
[백준 14888] 연산자 끼워넣기  (0) 2021.04.18