본문 바로가기

프로그래밍/알고리즘 문제 풀이

백준 17070. 파이프 옮기기 1 (DFS)

저번 문제와 마찬가지로 삼성 A형 기출문제, 역시 완전탐색 기반이긴 하지만 다른문제들보다 좀 더 쉬웠던것 같다.

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

 

17070번: 파이프 옮기기 1

유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 번호이고, 행과 열의 번호는 1부터 시작한다. 각각의 칸은 빈 칸이거나 벽이다. 오늘은 집 수리를 위해서 파이프 하나를 옮기려고 한다. 파이프는 아래와 같은 형태이고, 2개의 연속된 칸을 차지하는 크기이다. 파이프는 회전시킬 수 있으며, 아래와 같이

www.acmicpc.net

먼저 파이프가 한 번에 90도로 꺾일 수 없다는 조건이 있기 떄문에 전에 파이프가 어떻게 설치되어 있는지 알 수 있는

변수가 필요하다. 나는 가로, 대각선, 세로 이런식으로 배열에 배치한 다음, 현재 파이프가 어떻게 설치되어 있는지 기준 

앞뒤로 한 칸씩만 갈 수 있도록 하여, 90도로 꺾이는 파이프가 없도록 만들었다.

그리고 파이프를 설치할때 가로와 세로는 가는방향에만 벽이없다면 괜찮지만 대각선방향으로 갈때는 가는 방향말고도 

위쪽과 왼쪽 방향에 벽이없어야 하기 때문에 한 번더 체크 해주어야 한다.

위 2가지 예외 사항만 없다면 단순한 dfs구현이므로 문제 자체는 쉬운편인듯 하다.

https://github.com/MingNine9999/algorithm/blob/master/Problems/boj17070.cpp

 

MingNine9999/algorithm

Contribute to MingNine9999/algorithm development by creating an account on GitHub.

github.com

 

+) DP로 풀면 더욱 빠르게 값이 나온다는 걸 생각하고 DP로 다시 풀어보았다.

https://mingnine9999.tistory.com/22

 

 

백준 17070. 파이프 옮기기 1_ver2 (DP)

전에 올렸던 파이프 옮기기 1 문제인데, 그 땐 범위가 작아서 단순 나이브하게 DFS로 탐색했는데, DP를 이용해서 풀면 훨씬 속도가 빠를 것 같아서 다시 풀어보았다. https://www.acmicpc.net/problem/17070 17070..

mingnine9999.tistory.com