티스토리 뷰
DFS방식으로 풀었다.
파이프가 가로일경우에 다음으로 밀 수 있는 경우가 가로, 대각선
세로일 경우 세로, 대각선
대각선일 경우 가로, 세로, 대각선
이 방법으로 밀 수 있다. 그래서 경우를 나눠서 탐색을 했다.
def move(x, y, shape): #shape :1가로 2:세로 3:대각선
global cnt
if x == N-1 and y == N-1:
cnt += 1
return
if shape == 1: #가로라면
if y+1 <= N-1 and squre[x][y+1] == 0: #가로
move(x, y+1, 1)
if x+1 <= N-1 and y+1 <= N-1 and squre[x+1][y] == 0 and squre[x][y+1] == 0 and squre[x+1][y+1] == 0: #대각선
move(x+1, y+1, 3)
elif shape == 2: #세로라면
if x+1 <= N-1 and squre[x+1][y] == 0: #세로
move(x+1, y, 2)
if x+1 <= N-1 and y+1 <= N-1 and squre[x+1][y] == 0 and squre[x][y+1] == 0 and squre[x+1][y+1] == 0: #대각선
move(x+1, y+1, 3)
elif shape == 3: #대각선이라면
if y+1 <= N-1 and squre[x][y+1] == 0: #가로
move(x, y+1, 1)
if x+1 <= N-1 and squre[x+1][y] == 0: #세로
move(x+1, y, 2)
if x+1 <= N-1 and y+1 <= N-1 and squre[x+1][y] == 0 and squre[x][y+1] == 0 and squre[x+1][y+1] == 0: #대각선
move(x+1, y+1, 3)
N = int(input())
squre = [list(map(int, input().split(' ')))for _ in range(N)]
cnt = 0
move(0, 1, 1) #처음은 항상 가로 파이프는 (0,0)과 (0,1)에 걸쳐져 있다
print(cnt)
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 16953. A -> B (0) | 2021.03.27 |
---|---|
[백준] 11399. ATM (0) | 2021.03.27 |
[백준] 1074. Z (0) | 2021.03.07 |
[백준] 17478. 재귀함수가 뭔가요? (0) | 2021.03.04 |
[백준] 6603. 로또 (0) | 2021.03.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 비동기패턴
- SWEA
- Python
- vue
- 백준
- N과M
- 알고리즘
- vue.js
- 자바
- 파이썬
- 트리
- 위클리챌린지2주차
- commit되돌리기
- javascript
- AWS
- splide
- SQL
- django
- 독학
- 세션 스토리지
- 프로그래머스
- 배포
- SSAFY퇴소
- 안드로이드스튜디오
- git
- Java
- SSAFY
- 싸피
- Pyhton
- DOM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함