헝D의 일기장
article thumbnail

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

 

17484번: 진우의 달 여행 (Small)

첫줄에 지구와 달 사이 공간을 나타내는 행렬의 크기를 나타내는 N, M (2≤ N, M ≤ 6)이 주어진다. 다음 N줄 동안 각 행렬의 원소 값이 주어진다. 각 행렬의 원소값은 100 이하의 자연수이다.

www.acmicpc.net

 

나의풀이

import java.util.*;
import java.io.*;
public class Main {
    static int n, m;
    static int[][] arr;
    static int[] visited;
    static int min= Integer.MAX_VALUE;
    static int[] ydir={-1,0,1};// 가능한 방향(왼아, 아, 오아)
    
    public static void main(String args[]) throws Exception{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        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());
                
            }    
        }
        
        //지구의 어느 곳에서든 출발할 수 있으므로 출발지점이 m개인 셈.
        for(int i=0;i<m;i++){
            visited=new int[n];//깊이는 n개
            visited[0]=i; // 방문한 y방향 인덱스 
            dfs(1, i, -1);
        }
        
        bw.write(String.valueOf(min));
        bw.flush();
        br.close();
        bw.close();
} 
    
    public static void dfs(int depth, int y, int dir){//이제 방문할 깊이, 현재 y인덱스, 이전에 이동한 방향 
        if(depth==n){//마지막 깊이라면 
            int sum=arr[0][visited[0]];//처음 시작한위치의 연료의 양 
            for(int i=1;i<n;i++){
                sum+=arr[i][visited[i]];//각 깊이에서의 연료의 양을 더한다 
            }
            min=min>sum?sum:min;
            return;
        }
        
        for(int i=0;i<3;i++){//가능한 방향은 세방향임 
            int dy=y+ydir[i]; //이동했을때 y 좌표 
            if(dy>=0 && dy<m && dir != i){//이동했을때 좌표를 벗어나지 않고 이전에 이동한 방향이 아닐때 
                visited[depth]=dy;//해당 깊이에 방문한 y방향 인덱스
                dfs(depth+1, dy, i);
                
            }
        }
    }
}
profile

헝D의 일기장

@헝D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!