알고리즘 공부/백준 문제풀이

[python 백준] 15685번 드래곤 커브

이현찬 2022. 8. 7. 19:32
728x90

문제링크

 

15685번: 드래곤 커브

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

www.acmicpc.net

문제 설명

  • 일정한 규칙에 따라 세대를 거듭해 성장하는 드레곤 커브를 구현하면 되는 구현 문제
  • 드래곤 커브가 성장하는 규칙을 어떻게 구현할 지 생각해내는 것이 어려운 문제

고민한 부분

드래곤 커브가 성장하는 규칙은 K 세대의 커브의 끝 점을 기준으로 K 세대의 커브 전체를 시계 방향으로 90도 회전시켜 붙인 것이다.

  • 이전 세대의 마지막 점부터 시작점까지 역순으로 이동해 온 경로의 역순으로 이동한 방향을 반시계 방향으로 90도 회전시켜 그에 맞게 커브를 성장시키면 된다. 아래 그림을 보면 이해하기 쉽다.
    1. 2세대 커브는 [우 상 좌 상]으로 이동하며 그려짐
    2. 3세대 커브는 2세대 커브가 그려진 순서의 역순 [상 좌 상 우]를 각각 반시계 방향으로 회전시킨 방향인 [좌 하 좌 상] 순서로 선분을 추가해준다.
  • 세대가 거듭할 때 이런 식으로 누적된 경로를 역순으로 회전시킨 방향으로 이동하면 드래곤 커브가 완성된다.
  • 아래 path_list가 이런 기능을 구현하는 함수로 가장 중요하다.

드래곤 커브 성장 예시

Lesson learned

  • BFS, DFS나 다이나믹 프로그래밍과 같이 특정한 방법을 알고 있어야 푸는 문제가 아닌 단순 구현 문제는 문제를 잘 읽고 그 조건을 구현하면 되기 때문에 틀리고 난 후에 명확하게 배울 수 있는 점을 찾기 어렵다.
  • 지금까지 구현 문제를 풀며 반복되는 실수는 문제를 잘못 이해하거나 조건을 누락하며 읽는 실수를 많이 한다는 점이다.
    • 규칙에 따라 방향을 바꾸는 경우 시계 방향, 반시계 방향을 헷갈리는 등의 실수를 자주하는 것을 깨달았다.