PS/백준

[백준] 15685 드래곤 커브

HUN 2021. 3. 11. 19:56

0세대: 1

1세대: 1 2

2세대: 1 2 3 2

3세대: 1 2 3 2 3 0 3 2

4세대: 1 2 3 2 3 0 3 2 3 0 1 0 3 0 3 2

...

드래곤 커브의 시작 지점과 방향, 세대가 주어지며 드래곤 커브는 세대에 따라 확장된다. 네 꼭지점이 모두 드래곤 커브에 포함되는

1 * 1 크기의 셀 개수를 구하는 문제이다.

 

처음 문제를 풀 경우 세대마다 드래곤 커브를 구하고 이를 90도 회전하는 알고리즘을 생각할 수 있다. 하지만 이러한 알고리즘을 작성하면 매우 복잡해진다. 대신 드래곤 커브의 방향에서 규칙을 찾으면 문제가 간단해진다. 세대에 따른 선분의 방향을 구하면 아래와 같다.

 

→(0)인 경우

0세대: 0

1세대: 0 1

2세대: 0 1 2 1

3세대: 0 1 2 1 2 3 2 1

4세대: 0 1 2 1 2 3 2 1 2 3 0 3 2 3 2 1 
...

 

 

N 세대의 방향은 N-1 세대의 역방향 원소에 k 에 대해 (k+1) % 4의 값이 추가되는 것을 알 수 있다. 이렇게 구한 방향을 시작 지점에 대해 적용하면 문제를 해결할 수 있다.

 

Python

 

728x90