ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ] 4485 ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€? JAVA
    STUDY ๐Ÿ’›/์•Œ๊ณ ๋ฆฌ์ฆ˜ 2021. 2. 15. 14:33
    ๋ฐ˜์‘ํ˜•

    [๋ฌธ์ œ]

    www.acmicpc.net/problem/4485

     

    4485๋ฒˆ: ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€?

    ์ ค๋‹ค์˜ ์ „์„ค ๊ฒŒ์ž„์—์„œ ํ™”ํ์˜ ๋‹จ์œ„๋Š” ๋ฃจํ”ผ(rupee)๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ„ํ˜น '๋„๋‘‘๋ฃจํ”ผ'๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ฒ€์ •์ƒ‰ ๋ฃจํ”ผ๋„ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๊ฑธ ํš๋“ํ•˜๋ฉด ์˜คํžˆ๋ ค ์†Œ์ง€ํ•œ ๋ฃจํ”ผ๊ฐ€ ๊ฐ์†Œํ•˜๊ฒŒ ๋œ๋‹ค! ์ ค๋‹ค์˜ ์ „์„ค ์‹œ๋ฆฌ์ฆˆ์˜ ์ฃผ

    www.acmicpc.net

    ์ ค๋‹ค์˜ ์ „์„ค ๊ฒŒ์ž„์—์„œ ํ™”ํ์˜ ๋‹จ์œ„๋Š” ๋ฃจํ”ผ(rupee)๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ„ํ˜น '๋„๋‘‘๋ฃจํ”ผ'๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ฒ€์ •์ƒ‰ ๋ฃจํ”ผ๋„ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๊ฑธ ํš๋“ํ•˜๋ฉด ์˜คํžˆ๋ ค ์†Œ์ง€ํ•œ ๋ฃจํ”ผ๊ฐ€ ๊ฐ์†Œํ•˜๊ฒŒ ๋œ๋‹ค!

    ์ ค๋‹ค์˜ ์ „์„ค ์‹œ๋ฆฌ์ฆˆ์˜ ์ฃผ์ธ๊ณต, ๋งํฌ๋Š” ์ง€๊ธˆ ๋„๋‘‘๋ฃจํ”ผ๋งŒ ๊ฐ€๋“ํ•œ N x N ํฌ๊ธฐ์˜ ๋™๊ตด์˜ ์ œ์ผ ์™ผ์ชฝ ์œ„์— ์žˆ๋‹ค. [0][0]๋ฒˆ ์นธ์ด๊ธฐ๋„ ํ•˜๋‹ค. ์™œ ์ด๋Ÿฐ ๊ณณ์— ๋“ค์–ด์™”๋ƒ๊ณ  ๋ฌป๋Š”๋‹ค๋ฉด ๋ฐ–์—์„œ ์‚ฌ๋žŒ๋“ค์ด ์ž๊พธ "์ ค๋‹ค์˜ ์ „์„ค์— ๋‚˜์˜ค๋Š” ๋…น์ƒ‰ ์• ๊ฐ€ ์ ค๋‹ค์ง€?"๋ผ๊ณ  ๋ฌผ์–ด๋ดค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งํฌ๊ฐ€ ๋…น์ƒ‰ ์˜ท์„ ์ž…์€ ์ฃผ์ธ๊ณต์ด๊ณ  ์ ค๋‹ค๋Š” ๊ทธ๋ƒฅ ์žกํ˜€์žˆ๋Š” ๊ณต์ฃผ์ธ๋ฐ, ๊ฒŒ์ž„ ํƒ€์ดํ‹€์— ์ ค๋‹ค๊ฐ€ ๋‚˜์™€์žˆ๋‹ค๊ณ  ์ž๊พธ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ ‡๊ฒŒ ์ฐฉ๊ฐํ•˜๋‹ˆ๊นŒ ์ •์‹ ๋ณ‘์— ๊ฑธ๋ฆด ์œ„๊ธฐ์— ๋†“์ธ ๊ฒƒ์ด๋‹ค.

    ํ•˜์—ฌํŠผ ์ ค๋‹ค...์•„๋‹ˆ ๋งํฌ๋Š” ์ด ๋™๊ตด์˜ ๋ฐ˜๋Œ€ํŽธ ์ถœ๊ตฌ, ์ œ์ผ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์ธ [N-1][N-1]๊นŒ์ง€ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ๋™๊ตด์˜ ๊ฐ ์นธ๋งˆ๋‹ค ๋„๋‘‘๋ฃจํ”ผ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด ์นธ์„ ์ง€๋‚˜๋ฉด ํ•ด๋‹น ๋„๋‘‘๋ฃจํ”ผ์˜ ํฌ๊ธฐ๋งŒํผ ์†Œ์ง€๊ธˆ์„ ์žƒ๊ฒŒ ๋œ๋‹ค. ๋งํฌ๋Š” ์žƒ๋Š” ๊ธˆ์•ก์„ ์ตœ์†Œ๋กœ ํ•˜์—ฌ ๋™๊ตด ๊ฑด๋„ˆํŽธ๊นŒ์ง€ ์ด๋™ํ•ด์•ผ ํ•˜๋ฉฐ, ํ•œ ๋ฒˆ์— ์ƒํ•˜์ขŒ์šฐ ์ธ์ ‘ํ•œ ๊ณณ์œผ๋กœ 1์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋งํฌ๊ฐ€ ์žƒ์„ ์ˆ˜๋ฐ–์— ์—†๋Š” ์ตœ์†Œ ๊ธˆ์•ก์€ ์–ผ๋งˆ์ผ๊นŒ?


    [์ž…๋ ฅ]
    ์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

    ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ๋™๊ตด์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (2 ≤ N ≤ 125) N = 0์ธ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€๋ฉด ์ „์ฒด ์ž…๋ ฅ์ด ์ข…๋ฃŒ๋œ๋‹ค.

    ์ด์–ด์„œ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋™๊ตด์˜ ๊ฐ ์นธ์— ์žˆ๋Š” ๋„๋‘‘๋ฃจํ”ผ์˜ ํฌ๊ธฐ๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋„๋‘‘๋ฃจํ”ผ์˜ ํฌ๊ธฐ๊ฐ€ k๋ฉด ์ด ์นธ์„ ์ง€๋‚˜๋ฉด k๋ฃจํ”ผ๋ฅผ ์žƒ๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์–ด์ง€๋Š” ๋ชจ๋“  ์ •์ˆ˜๋Š” 0 ์ด์ƒ 9 ์ดํ•˜์ธ ํ•œ ์ž๋ฆฌ ์ˆ˜๋‹ค.


    [์ถœ๋ ฅ]
    ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ํ•œ ์ค„์— ๊ฑธ์ณ ์ •๋‹ต์„ ํ˜•์‹์— ๋งž์ถฐ์„œ ์ถœ๋ ฅํ•œ๋‹ค. ํ˜•์‹์€ ์˜ˆ์ œ ์ถœ๋ ฅ์„ ์ฐธ๊ณ ํ•˜์‹œ์˜ค.

    * ์ถœ์ฒ˜ : ICPC > Regionals > North America > Pacific Northwest Regional > 2008 Pacific Northwest Region Programming Contest D๋ฒˆ

     


    [Solution]

    package boj4485_๋…น์ƒ‰์˜ท์ž…์€์• ๊ฐ€์ ค๋‹ค์ง€;
    /* BFS + ๋‹ค์ต์ŠคํŠธ๋ผ
     * */
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.PriorityQueue;
    import java.util.StringTokenizer;
    
    class Node implements Comparable<Node>{
    	int r, c, rupee;
    	
    	public Node(int r, int c, int rupee) {
    		this.r = r;
    		this.c = c;
    		this.rupee = rupee;
    	}
    
    	@Override
    	public int compareTo(Node o) {
    		return rupee - o.rupee;
    	}
    }
    
    public class Main {
    	static int n;
    	static int[][] map;
    	static boolean[][] visited;
    	static int[][] resRupee;
    	
    	static int[] dx = {0, 0, 1, -1};
    	static int[] dy = {1, -1, 0, 0};
    	
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st;
    		
    		//์˜ˆ์ œ cnt
    		int probCnt = 0;
    		
    		while(true) {
    			probCnt++;
    			
    			st = new StringTokenizer(br.readLine());
    			n = Integer.parseInt(st.nextToken());		//๋™๊ตด ํฌ๊ธฐ n*n
    			
    			//n=0 ์ž…๋ ฅ์‹œ ์ข…๋ฃŒ
    			if(n == 0) return;
    			
    			map = new int[n][n];				//๋™๊ตด
    			visited = new boolean[n][n];		//์ขŒํ‘œ ๋ฐฉ๋ฌธ ox
    			resRupee = new int[n][n];			//๋‹ค์ต์ŠคํŠธ๋ผ ๊ฒฐ๊ณผ๊ฐ’ arr
    			
    			for(int i=0; i<n; ++i) {
    				//์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”
    				Arrays.fill(resRupee[i], n*125);
    				
    				st = new StringTokenizer(br.readLine());
    				for(int j=0; j<n; ++j) {
    					map[i][j] = Integer.parseInt(st.nextToken());
    				}
    			}
    			
    			PriorityQueue<Node> q = new PriorityQueue<Node>();		//๋ฃจํ”ผ๊ฐ’ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
    			q.add(new Node(0, 0, map[0][0]));	//์‹œ์ž‘์ขŒํ‘œ ๋…ธ๋“œ์ •๋ณด ํ์— ์‚ฝ์ž…
    			resRupee[0][0] = map[0][0];			//(0,0)์—์„œ ์žƒ๋Š” ๋ฃจํ”ผ๊ฐ’์€ ๊ณ ์ •
    			
    			while(!q.isEmpty()) {
    				Node node = q.poll();
    				int r = node.r;
    				int c = node.c;
    				int rupee = node.rupee;
    				
    				if(visited[r][c] == true) continue;		//๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ์ง€๋‚˜์นจ
    				visited[r][c] = true;
    				
    				//์ƒํ•˜์ขŒ์šฐ
    				for(int i=0; i<4; ++i) {
    					int nr = r + dy[i];
    					int nc = c + dx[i];
    					
    					//๋‹ค์Œ์ขŒํ‘œ(nr, nc)๊ฐ€ ๋™๊ตด๋ฐฐ์—ด ๋‚ด?
    					if(nr>=0 && nr<n && nc>=0 && nc<n) {
    						//ํ˜„์žฌ์ขŒํ‘œ์—์„œ ์žƒ๋Š” ๋ฃจํ”ผ + ๋‹ค์Œ์ขŒํ‘œ์—์„œ ์žƒ๋Š” ๋ฃจํ”ผ -> ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’ ์ฐพ๊ธฐ
    						if(rupee + map[nr][nc] < resRupee[nr][nc]) {
    							resRupee[nr][nc] = rupee + map[nr][nc];
    							q.add(new Node(nr, nc, resRupee[nr][nc]));
    						}
    					}
    				}
    			}
    			
    			System.out.println("Problem " + probCnt + ": " + resRupee[n-1][n-1]);
    		}
    	}
    }

     

    ๋ฐ˜์‘ํ˜•
Designed by Tistory.