본문 바로가기
알고리즘/백준

[백준 17070] 파이프 옮기기 1 (C++)

by Bloofer 2020. 7. 28.

A. 문제설명

https://www.acmicpc.net/problem/17070

문제에 대한 자세한 설명은 링크 참조

 

1. N*N 크기의 땅이 주어짐

2. 위와 같은 파이프를 좌표 (N, N)까지 미는데, 미는 중간에 벽지가 있으면 안됨

3. 또한, 파이프는 밀면서 회전시킬 수 있고, 그 방향은 가로/세로/대각선임

4. 가로는 우측, 우하향만, 세로는 하향, 우하향만, 대각선은 우측, 하향, 우하향 모두 밀 수 있음

5. 파이프를 한쪽 끝에서 반대쪽 끝까지 밀 수 있는 모든 경우 구하기

 

B. 접근법

DFS

 

파이프의 방향별 미는 규칙에 따라 해당 밀 위치에 벽지가 있는지 확인하고, 없는 경우에만 깊이 우선탐색을 하도록 함

 

C. 풀이

1. 좌측 상단 모서리에서부터 탐색 진행

2. 나의 경우, 파이프가 회전하여 이동하는 경우에 우하향으로만 진행하므로, 파이프의 오른쪽 모서리에 대한 이동영향만 파악하였다.

3. 매 DFS 호출시, 다음 위치의 파이프 오른쪽 모서리 좌표와 파이프의 방향을 함수 인자로 전달

4. 가로는 우측, 우하향만, 세로는 하향, 우하향만, 대각선은 우측, 하향, 우하향을 밀어, 민 위치에 벽지가 없는 경우 반복하여 DFS 재귀실행

5. 우하단 모서리에 도착한 경우에 대하여 계수

 

D. 내 코드