์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ์ฌ๊ท
- ์๋ฎฌ๋ ์ด์
- BFS
- ๊ตฌํ
- ํ๋ก์ด๋์์
- ํธ๋ผ์ด
- ๋ฐฑํธ๋ํน
- ์นด์นด์ค
- Django
- Floyd
- upperbound
- ์์ด
- dfs
- ์๋ฃ๊ตฌ์กฐ
- ๋นํธ๋ง์คํน
- ๊ทธ๋ฆฌ๋
- ๋ถ๋ถ์งํฉ
- ์ด๋ถํ์
- ์ด์งํธ๋ฆฌ
- ์ธ๊ทธ๋จผํธํธ๋ฆฌ
- Dijkstra
- ์กฐํฉ
- dp
- LowerBound
- ์ฐ์ ์์ํ
- ํ์๊ฐ์
- Union Find
- ๋ค์ต์คํธ๋ผ
- ํฌํฌ์ธํฐ
- PriorityQueue
- Today
- Total
J
[JAVA] BOJ ๋ฐฑ์ค 17144 ๋ฏธ์ธ๋จผ์ง ์๋ ! ๋ณธ๋ฌธ
[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์ด ๋์ ์๋ ์ ํ ์ผ์ด ์์๋๋ก ์ผ์ด๋๋ค.
- ๋ฏธ์ธ๋จผ์ง๊ฐ ํ์ฐ๋๋ค. ํ์ฐ์ ๋ฏธ์ธ๋จผ์ง๊ฐ ์๋ ๋ชจ๋ ์นธ์์ ๋์์ ์ผ์ด๋๋ค.
- (r, c)์ ์๋ ๋ฏธ์ธ๋จผ์ง๋ ์ธ์ ํ ๋ค ๋ฐฉํฅ์ผ๋ก ํ์ฐ๋๋ค.
- ์ธ์ ํ ๋ฐฉํฅ์ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์๊ฑฐ๋, ์นธ์ด ์์ผ๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก๋ ํ์ฐ์ด ์ผ์ด๋์ง ์๋๋ค.
- ํ์ฐ๋๋ ์์ Ar,c/5์ด๊ณ ์์์ ์ ๋ฒ๋ฆฐ๋ค.
- (r, c)์ ๋จ์ ๋ฏธ์ธ๋จผ์ง์ ์์ Ar,c - (Ar,c/5)×(ํ์ฐ๋ ๋ฐฉํฅ์ ๊ฐ์) ์ด๋ค.
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์๋ํ๋ค.
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์์๋ ๋ฐ๋์ด ๋์จ๋ค.
- ์์ชฝ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๋ฐ๋์ ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก ์ํํ๊ณ , ์๋์ชฝ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๋ฐ๋์ ์๊ณ๋ฐฉํฅ์ผ๋ก ์ํํ๋ค.
- ๋ฐ๋์ด ๋ถ๋ฉด ๋ฏธ์ธ๋จผ์ง๊ฐ ๋ฐ๋์ ๋ฐฉํฅ๋๋ก ๋ชจ๋ ํ ์นธ์ฉ ์ด๋ํ๋ค.
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์์ ๋ถ๋ ๋ฐ๋์ ๋ฏธ์ธ๋จผ์ง๊ฐ ์๋ ๋ฐ๋์ด๊ณ , ๊ณต๊ธฐ์ฒญ์ ๊ธฐ๋ก ๋ค์ด๊ฐ ๋ฏธ์ธ๋จผ์ง๋ ๋ชจ๋ ์ ํ๋๋ค.
๋ค์์ ํ์ฐ์ ์์์ด๋ค.

์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ ์นธ์ด ์๊ธฐ ๋๋ฌธ์, ๋ ๋ฐฉํฅ์ผ๋ก๋ง ํ์ฐ์ด ์ผ์ด๋ฌ๋ค.

์ธ์ ํ ๋ค ๋ฐฉํฅ์ผ๋ก ๋ชจ๋ ํ์ฐ์ด ์ผ์ด๋๋ค.

๊ณต๊ธฐ์ฒญ์ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก๋ ํ์ฐ์ด ์ผ์ด๋์ง ์๋๋ค.
๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๋ฐ๋์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์ํํ๋ค.

๋ฐฉ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, 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์ผ๋ก ๊ฐ๋ ๊ฒ๋ง ์ ์ํ๋ฉด ๋๋ค.
'๐ Problem Solving > ๐ป Samsung SW Expert' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] BOJ ๋ฐฑ์ค 14890 ๊ฒฝ์ฌ๋ก (0) | 2023.02.18 |
---|---|
[JAVA] BOJ ๋ฐฑ์ค 17779 ๊ฒ๋ฆฌ๋ฉ๋๋ง2 (0) | 2023.02.17 |
[JAVA] BOJ ๋ฐฑ์ค 17143 ๋์์ (1) | 2023.02.17 |
[JAVA] BOJ ๋ฐฑ์ค 17142 ์ฐ๊ตฌ์3 (0) | 2023.02.17 |
[JAVA] BOJ ๋ฐฑ์ค 17140 ์ด์ฐจ์ ๋ฐฐ์ด๊ณผ ์ฐ์ฐ (0) | 2023.02.17 |