import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int N,M;
static int[][] arr;
static int ans;
// 좌하단 , 하단 , 우하단
// [y][x] (y,x)
// beforeMove
static int[] dy = {1,1,1};
static int[] dx = {-1,0,1};
public static void main(String[] args) throws IOException {
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st =new StringTokenizer(br.readLine());
N=Integer.parseInt(st.nextToken());
M=Integer.parseInt(st.nextToken());
arr = new int[N][M];
for(int i=0;i<N;i++){
st =new StringTokenizer(br.readLine());
for(int j=0;j<M;j++){
arr[i][j]=Integer.parseInt(st.nextToken());
}
}
ans=Integer.MAX_VALUE;
for(int i=0;i<M;i++){
dfs(0,i,-1,arr[0][i]);
}
System.out.println(ans);
}
static void dfs(int y,int x,int beforeWay,int sum){
/*
if(y==N-1){
ans=Math.min(ans,sum);
return;
}
*/
for(int i=0;i<3;i++){
if(beforeWay == i ) continue;
int moveX = dx[i]+x;
int moveY = dy[i]+y;
if(moveY==N){
ans=Math.min(ans,sum);
return;
}
if(moveX<0 || moveY<0 || moveX>=M || moveY>N) continue;
dfs(moveY,moveX,i,sum+arr[moveY][moveX]);
}
}
}
'코딩테스트' 카테고리의 다른 글
[알고리즘 문제풀이] 백준 20006번 랭킹전 대기열 (구현) (0) | 2024.11.26 |
---|---|
[알고리즘 문제풀이] 1764번 듣보잡 (해시 응용 ,문자열 ) (0) | 2024.11.18 |
[알고리즘 문제풀이] 백준 11479 서로 다른 부분 문자열의 개수 (문자열 응용) (1) | 2024.11.15 |
[알고리즘 문제 풀이] 백준 1920 수 찾기 ( 해시 응용 ) (0) | 2024.11.14 |
[알고리즘 문제풀이] 백준14891번 톱니바퀴 ( 구현 ) (1) | 2024.11.12 |