J

[JAVA] BOJ ๋ฐฑ์ค€ 17144 ๋ฏธ์„ธ๋จผ์ง€ ์•ˆ๋…•! ๋ณธ๋ฌธ

๐Ÿ”‘ Problem Solving/๐Ÿ’ป Samsung SW Expert

[JAVA] BOJ ๋ฐฑ์ค€ 17144 ๋ฏธ์„ธ๋จผ์ง€ ์•ˆ๋…•!

snowball๐Ÿฐ 2023. 2. 17. 17:51

๋ฌธ์ œ

๋ฏธ์„ธ๋จผ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์‚ฌ๊ณผ๋Š” ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์‚ฌ๊ณผ๋Š” ์ง‘์„ ํฌ๊ธฐ๊ฐ€ R×C์ธ ๊ฒฉ์žํŒ์œผ๋กœ ๋‚˜ํƒ€๋ƒˆ๊ณ , 1×1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆด๋‹ค. ๊ตฌ์‚ฌ๊ณผ๋Š” ๋›ฐ์–ด๋‚œ ์ฝ”๋”ฉ ์‹ค๋ ฅ์„ ์ด์šฉํ•ด ๊ฐ ์นธ (r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ–ˆ๋‹ค. (r, c)๋Š” rํ–‰ c์—ด์„ ์˜๋ฏธํ•œ๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋Š” ํ•ญ์ƒ 1๋ฒˆ ์—ด์— ์„ค์น˜๋˜์–ด ์žˆ๊ณ , ํฌ๊ธฐ๋Š” ๋‘ ํ–‰์„ ์ฐจ์ง€ํ•œ๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์€ ์นธ์—๋Š” ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๊ณ , (r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์€ Ar,c์ด๋‹ค.

1์ดˆ ๋™์•ˆ ์•„๋ž˜ ์ ํžŒ ์ผ์ด ์ˆœ์„œ๋Œ€๋กœ ์ผ์–ด๋‚œ๋‹ค.

  1. ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ํ™•์‚ฐ๋œ๋‹ค. ํ™•์‚ฐ์€ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์นธ์—์„œ ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค.
    • (r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€๋Š” ์ธ์ ‘ํ•œ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์‚ฐ๋œ๋‹ค.
    • ์ธ์ ‘ํ•œ ๋ฐฉํ–ฅ์— ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ์นธ์ด ์—†์œผ๋ฉด ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” ํ™•์‚ฐ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ™•์‚ฐ๋˜๋Š” ์–‘์€ Ar,c/5์ด๊ณ  ์†Œ์ˆ˜์ ์€ ๋ฒ„๋ฆฐ๋‹ค.
    • (r, c)์— ๋‚จ์€ ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์€ Ar,c - (Ar,c/5)×(ํ™•์‚ฐ๋œ ๋ฐฉํ–ฅ์˜ ๊ฐœ์ˆ˜) ์ด๋‹ค.
  2. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.
    • ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์—์„œ๋Š” ๋ฐ”๋žŒ์ด ๋‚˜์˜จ๋‹ค.
    • ์œ„์ชฝ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋ฐ”๋žŒ์€ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•˜๊ณ , ์•„๋ž˜์ชฝ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋ฐ”๋žŒ์€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•œ๋‹ค.
    • ๋ฐ”๋žŒ์ด ๋ถˆ๋ฉด ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ๋ฐ”๋žŒ์˜ ๋ฐฉํ–ฅ๋Œ€๋กœ ๋ชจ๋‘ ํ•œ ์นธ์”ฉ ์ด๋™ํ•œ๋‹ค.
    • ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์—์„œ ๋ถ€๋Š” ๋ฐ”๋žŒ์€ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์—†๋Š” ๋ฐ”๋žŒ์ด๊ณ , ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋กœ ๋“ค์–ด๊ฐ„ ๋ฏธ์„ธ๋จผ์ง€๋Š” ๋ชจ๋‘ ์ •ํ™”๋œ๋‹ค.

๋‹ค์Œ์€ ํ™•์‚ฐ์˜ ์˜ˆ์‹œ์ด๋‹ค.

์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์— ์นธ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ™•์‚ฐ์ด ์ผ์–ด๋‚ฌ๋‹ค.

์ธ์ ‘ํ•œ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ๋ชจ๋‘ ํ™•์‚ฐ์ด ์ผ์–ด๋‚œ๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ๋Š” ํ™•์‚ฐ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋ฐ”๋žŒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•œ๋‹ค.

๋ฐฉ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, T์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„ ๊ตฌ์‚ฌ๊ณผ์˜ ๋ฐฉ์— ๋‚จ์•„์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ๊ตฌํ•ด๋ณด์ž.

์ „์ฒด ์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class Main {
	static int R;
	static int C;
	static int[][] home;
	static int cx;
	static int cy;
	
    public static void main(String[] args) throws Exception {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
        
        R = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());
        int T = Integer.parseInt(st.nextToken());
        home = new int[R][C];
        for(int i=0; i<R; i++) {
        	st = new StringTokenizer(bf.readLine(), " ");
        	for(int j=0; j<C; j++) {
        		home[i][j] = Integer.parseInt(st.nextToken());
        		if(home[i][j] == -1) { cx = i; cy = j;}
        	}
        }
        for(int t=0; t<T; t++) {
        	spread();
        }
        int result = 0;
        for(int i=0; i<R; i++)
        	for(int j=0; j<C; j++)
        		result += home[i][j];
        sb.append(result+2);
        System.out.println(sb.toString());
        
    }
    static void spread() {
    	int[] dx = {-1, 0, 1, 0};
    	int[] dy = {0, 1, 0, -1};
    	int nx, ny, count;
    	int[][] add = new int[R][C];
    	// ํ™•์‚ฐ
    	for(int i=0; i<R; i++) {
    		for(int j=0; j<C; j++) {
    			count = 0;
    			for(int d=0; d<4; d++) {
    				nx = i+dx[d];
    				ny = j+dy[d];
    				if(nx < 0 || ny < 0 || nx >= R || ny >= C || home[nx][ny] == -1) continue;
    				count ++; add[nx][ny] += home[i][j] / 5;
    			}
				add[i][j] -= (home[i][j] / 5) * count;
    		}
    	}
    	for(int i=0; i<R; i++)
    		for(int j=0; j<C; j++)
    			home[i][j] += add[i][j];
    	
    	// ๊ณต์ฒญ
    	// 1. ์œ— ๋ถ€๋ถ„
    	nx = 0;
    	ny = 0;
    	int idx = 0;
    	int x = cx-2; int y = cy;
    	while(x != cx-1 || y != cy) {
    		nx = x+dx[idx]; ny = y+dy[idx];
    		if(nx < 0 || ny < 0 || nx >= cx || ny >= C) {
    			idx +=1;
    			if(idx > 3) idx = 0;
    			nx = x+dx[idx]; ny = y+dy[idx];
    		}
    		if(home[nx][ny] != -1)
    			home[x][y] = home[nx][ny];
    		else home[x][y] =0;
    		x = nx; y = ny;
    	}
    	// 2. ์•„๋žซ ๋ถ€๋ถ„
    	x = cx+1; y = cy;
    	while(x != cx || y != cy) {
    		nx = x+dx[idx]; ny = y+dy[idx];
    		if(nx < cx || ny < 0 || nx >= R || ny >= C) {
    			idx -=1;
    			if(idx < 0) idx = 3;
    			nx = x+dx[idx]; ny = y+dy[idx];
    		}
    		if(home[nx][ny] != -1)
    			home[x][y] = home[nx][ny];
    		else home[x][y] =0;
    		x = nx; y = ny;
    	}   	
    }
}

ํ•œ ์ค„ ์”ฉ ์‚ดํŽด๋ณด์ž!

static int R;
static int C;
static int[][] home;
static int cx;
static int cy;

R, C, home์— ์ž…๋ ฅ ๋ฐ›์€ ๋ฐฐ์—ด์„ ์ €์žฅํ•ด์ค€๋‹ค.

cx, cy๋Š” ๊ณต๊ธฐ ์ฒญ์ •๊ธฐ์˜ ์œ„์น˜์ด๋‹ค. (๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋‘ ์นธ์€ ๋ถ™์–ด์žˆ์œผ๋ฏ€๋กœ ์•„๋ž˜์นธ์˜ ๊ฐ’๋งŒ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค.)

static void spread() {
	int[] dx = {-1, 0, 1, 0};
	int[] dy = {0, 1, 0, -1};
	int nx, ny, count;
	int[][] add = new int[R][C];
	// ํ™•์‚ฐ
	for(int i=0; i<R; i++) {
		for(int j=0; j<C; j++) {
			count = 0;
			for(int d=0; d<4; d++) {
				nx = i+dx[d];
				ny = j+dy[d];
				if(nx < 0 || ny < 0 || nx >= R || ny >= C || home[nx][ny] == -1) continue;
				count ++; add[nx][ny] += home[i][j] / 5;
			}
		add[i][j] -= (home[i][j] / 5) * count;
		}
	} 	for(int i=0; i<R; i++)
    		for(int j=0; j<C; j++)
    			home[i][j] += add[i][j];

๋จผ์ € ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ํ™•์‚ฐํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์นธ์—์„œ “๋™์‹œ์—” ์ผ์–ด๋‚œ๋‹ค. ์ด๋•Œ 4๋ฐฉ์„ ํƒ์ƒ‰ํ•˜์—ฌ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์ด๋ฉด(๊ฒฉ์ž๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜, ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ œ์™ธ) ํ˜„ ์œ„์น˜์˜ ๋ฏธ์„ธ๋จผ์ง€๋ฅผ 5๋กœ ๋‚˜๋ˆˆ ๊ฐ’๋งŒํผ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๊ฒฉ์ž์—์„œ 4๋ฐฉํ–ฅ์„ ํƒ์ƒ‰ํ•˜์—ฌ ๋ฏธ์„ธ๋จผ์ง€๋ฅผ ์ด๋™์‹œ์ผœ์•ผ ํ•œ๋‹ค.

๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์ด๋™ํ•˜๋Š” ์–‘์€ add ๋ฐฐ์—ด์— ๋‹ด์•„์„œ ๋ชจ๋“  ๊ฒฉ์ž์—์„œ ์กฐ์‚ฌ๊ฐ€ ๋๋‚œ ํ›„ ๋”ํ•ด์ฃผ๊ฒ ๋‹ค.(๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ home ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๋ฉด ๋‹ค์Œ ์นธ์—์„œ๋Š” ์ด๋™ํ•œ ๋ฏธ์„ธ๋จผ์ง€๊นŒ์ง€ ๊ณ ๋ คํ•˜๊ฒŒ ๋œ๋‹ค.

nx = 0;
ny = 0;
int idx = 0;
int x = cx-2; int y = cy;
while(x != cx-1 || y != cy) {
	nx = x+dx[idx]; ny = y+dy[idx];
	if(nx < 0 || ny < 0 || nx >= cx || ny >= C) {
		idx +=1;
		if(idx > 3) idx = 0;
		nx = x+dx[idx]; ny = y+dy[idx];
	}
	if(home[nx][ny] != -1)
		home[x][y] = home[nx][ny];
	else home[x][y] =0;
	x = nx; y = ny;
}

๊ณต๊ธฐ์ฒญ์ •๊ธฐ ์œ„์ชฝ์€ → , ^, <-, V ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๊ฒŒ ๋˜๋ฉด ๊ฐ’์„ ์˜ฎ๊ธฐ๋Š”๋ฐ ํž˜๋“ค์–ด์ง„๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋Œ€๋กœ ์ด๋™๋ฐฉํ–ฅ์„ ์žก์•„์„œ ๊ฐ’์„ ๋„˜๊ฒจ๊ฐ€๋Š” ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•˜๊ฒ ๋‹ค.

์ฒซ๋ฒˆ์งธ๋กœ ์œ—๋ถ€๋ถ„ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ์ด๋™์„ ์ง„ํ–‰ํ•œ๋‹ค. x, y์— ์œ—๋ถ€๋ถ„์˜ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ ์œ„์นธ์˜ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. ์ด๋™์ด ์ „๋ถ€ ๋๋‚˜๋ฉด ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋กœ ๋Œ์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— while๋ฌธ์€ ๊ทธ๋•Œ๊นŒ์ง€๋งŒ ์ง„ํ–‰ํ•˜๋Š” ๊ฑธ๋กœ ํ•˜์ž

๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ idx๋Š” 0๋ถ€ํ„ฐ 3์œผ๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค. ๊ฒฉ์ž๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์ „์„ ๋ฐ”๊ฟ”์„œ ๋‹ค์Œ ์ง„ํ–‰ํ•  ๊ณณ์„ ์ˆ˜์ •ํ•ด์ค€๋‹ค. ๊ทธ ๊ฐ’์ด -1์ด ์•„๋‹ˆ๋ฉด(๊ณต๊ธฐ์ฒญ์ •๊ธฐ) ๋‹ค์Œ ์ด๋™ ๋ฐฉํ–ฅ์˜ ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ๋ณต์‚ฌํ•ด์ค€๋‹ค. ๋‹ค์Œ ์ง„ํ–‰ํ•  ๊ณณ์ด ๋ฏธ์„ธ๋จผ์ง€์ธ ๊ฒฝ์šฐ๋Š” ๋ฏธ์„ธ๋จผ์ง€๋กœ๋ถ€ํ„ฐ ์ •ํ™”๋œ ๊ณณ์ด๊ธฐ ๋•Œ๋ฌธ์— 0์œผ๋กœ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

    	x = cx+1; y = cy;
    	while(x != cx || y != cy) {
    		nx = x+dx[idx]; ny = y+dy[idx];
    		if(nx < cx || ny < 0 || nx >= R || ny >= C) {
    			idx -=1;
    			if(idx < 0) idx = 3;
    			nx = x+dx[idx]; ny = y+dy[idx];
    		}
    		if(home[nx][ny] != -1)
    			home[x][y] = home[nx][ny];
    		else home[x][y] =0;
    		x = nx; y = ny;
    	}   	
    }
}

์•„๋žซ๋ถ€๋ถ„์˜ ํƒ์ƒ‰์€ ์œ—๋ถ€๋ถ„์˜ ํƒ์ƒ‰๊ณผ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค, idx๊ฐ€ 3์—์„œ 0์œผ๋กœ ๊ฐ€๋Š” ๊ฒƒ๋งŒ ์œ ์˜ํ•˜๋ฉด ๋œ๋‹ค.

Comments