Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SSAFY
- BFS
- 완전 탐색
- lis
- 링크드리스트
- 메모리풀
- 스택
- 피보나치 수
- DP
- MST
- 재귀
- Knapsack
- 비트마스크
- 분할 정복
- 조합
- 그리디
- 크루스칼
- dfs
- 빠른 입출력
- 순열
- 우선순위 큐
- 백트래킹
- 세그먼트 트리
- 클래스
- 문자열
- BeautifulSoup
- 큐
- 이분 탐색
- 중복 순열
- 시뮬레이션
Archives
- Today
- Total
작심 24/7
[백준] 17070번 파이프 옮기기 1 본문
1. 가로
2. 세로
3. 대각선
현재 위치는 항상 0번이고
가로일 땐 1, 3번
세로일 땐 2, 3번
대각선일 땐 1, 2, 3번으로 이동할 수 있다.
이 패턴을 이용해
이전에 어느 방향이었는지와 현재 위치를 넘겨주며
재귀 호출로 완전 탐색을 구현하면 된다.
#include <iostream>
using namespace std;
int N, d, res;
int arr[17][17], dx[3] = { 0, 1, 1 }, dy[3] = { 1, 0, 1 };
bool isHorizontal(int x, int y) {
x += dx[0], y += dy[0];
if (x >= 0 && x < N && y >= 0 && y < N && !arr[x][y]) return true;
else return false;
}
bool isVertical(int x, int y) {
x += dx[1], y += dy[1];
if (x >= 0 && x < N && y >= 0 && y < N && !arr[x][y]) return true;
else return false;
}
bool isDiagonal(int x, int y) {
for (int i = 0; i < 3; i++) {
if (x + dx[i] >= 0 && x + dx[i] < N && y + dy[i] >= 0 && y + dy[i] < N && !arr[x + dx[i]][y + dy[i]]) continue;
else return false;
}
return true;
}
void Move(int x, int y, int d) {
if (x == N - 1 && y == N - 1) {
res++;
return;
}
switch (d)
{
case 0:
if (isHorizontal(x, y)) Move(x + dx[0], y + dy[0], 0);
if (isDiagonal(x, y)) Move(x + dx[2], y + dy[2], 2);
break;
case 1:
if (isVertical(x, y)) Move(x + dx[1], y + dy[1], 1);
if (isDiagonal(x, y)) Move(x + dx[2], y + dy[2], 2);
break;
case 2:
if (isHorizontal(x, y)) Move(x + dx[0], y + dy[0], 0);
if (isVertical(x, y)) Move(x + dx[1], y + dy[1], 1);
if (isDiagonal(x, y)) Move(x + dx[2], y + dy[2], 2);
break;
}
}
int main() {
cin >> N;
for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) cin >> arr[i][j];
Move(0, 1, 0);
cout << res;
return 0;
}
'백준' 카테고리의 다른 글
[백준] 11049번 행렬 곱셈 순서 (0) | 2020.08.19 |
---|---|
[백준] 17135번 캐슬 디펜스 (C++, JAVA) (0) | 2020.08.17 |
[백준] 16637번 괄호 추가하기 (0) | 2020.08.13 |
[백준] 17825번 주사위 윷놀이 (0) | 2020.08.06 |
[백준] 17822번 원판 돌리기 (0) | 2020.08.04 |
Comments