[2021년 08월 13일 23시 02분 작성]
[PS][완전탐색] BOJ 17484 : 진우의 달 여행(Small)

[문제 링크 : 클릭]
1. 풀이
Solve 함수를 다음과 같이 정의합니다.
Solve(y, x, last) : 현재 좌표가 (y, x)이고, 마지막으로 움직인 방향이 last일 때, 우주선이 달까지 가는데에 필요한 연료의 최소값 |
위 함수에 맞게 재귀로 완전탐색을 돌려주면 해결할 수 있습니다.
2. 소스코드
[Github 링크 : 클릭]
#include <bits/stdc++.h>
using namespace std;
const int INF = 2147000000;
const int dx[3] = {-1, 0, 1};
int n, m, ans=INF, board[7][7];
int Solve(int y, int x, int last)
{
if(y==n) return 0; //기저사례 : 달에 도착
int ret = INF;
for(int i=0; i<3; i++)
{
if(last==i) continue; //이전에 움직인 방향으로 움직일 수 없음
if(x+dx[i]<0 || x+dx[i]>=m) continue; //범위 밖으로 벗어날 수 없음
ret = min(ret, Solve(y+1, x+dx[i], i)+board[y][x]);
}
return ret;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin>>n>>m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin>>board[i][j];
for(int i=0; i<m; i++)
ans = min(ans, Solve(0, i, -1));
cout<<ans<<'\n';
return 0;
}
3. 복기
.
'PS > BOJ' 카테고리의 다른 글
[PS][구현] BOJ 17480 : 개구쟁이 준석이 (0) | 2021.08.14 |
---|---|
[PS][DP] BOJ 17485 : 진우의 달 여행(Large) (0) | 2021.08.13 |
[PS][자료구조] BOJ 17479 : 정식당 (0) | 2021.08.13 |
[PS][재귀] BOJ 17478 : 재귀함수가 뭔가요? (0) | 2021.08.13 |
[PS][DP] BOJ 9764 : 서로 다른 자연수의 합 (0) | 2021.08.09 |