ํฐ์คํ ๋ฆฌ ๋ทฐ
https://www.acmicpc.net/problem/19237
----------------------------------------------------------------------------------------------------------------------
[๋ฌธ์ ํ์ด]
๋ฌธ์ ๊ฐ ์์ฒญ ๊ธธ์ด์ ๋ณต์กํ ์ค ์์๋๋ฐ, ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์ด๋ณด๋ ๋จ์ ๊ตฌํ์ด๋ผ ์๊ฐ๋ณด๋ค ์ด๋ ต์ง๋ ์์์ต๋๋ค.
- start[]์ ๊ฐ ์์ด์ ์์ ๋ฐฉํฅ์ ์ ์ฅ
- priority[][][] ๋ฐฐ์ด์ ์์ด๋ค์ ์ฐ์ ์์๋ฅผ ์ ์ฅ
- shark[] ์์ด๋ค์ ํ์ฌ ์์น ์ ์ฅ ๋ฐฐ์ด
- sharkNum[][] ํด๋น ์์น์ ๋์๋ฅผ ๋ฟ๋ ค๋ ์์ด ์ ์ฅ
- timeLeft[][] ๋์๊ฐ ์ฌ๋ผ์ง๊ธฐ๊น์ง ๋จ์ ์๊ฐ
์์ 1๋ฒ์ ์์ ๋ฐฐ์ด๋ค์ ์ฌ์ฉํ์ฌ ์ดํด๋ณด์๋ฉด, ์ฐ์ 4๊ฐ์ ์์ด์ ์์์์น๋ฅผ shark[]์ ์ ์ฅํฉ๋๋ค.
์ฒ์ ์์น๋ ์์ด๋ค์ ๋์๊ฐ 4์ด๋์ ์ ์ง๋๋ฏ๋ก, ์์ด (i,j) ์์น๋ฅผ ์ ์ฅํ๊ณ , ๋จ์์๊ฐ์ 4๋ก ์ด๊ธฐํ ํด์ค๋๋ค.
๋ง์ง๋ง์ผ๋ก ์์ด์ ํ์ฌ ๋ฐฉํฅ๊ณผ, ๋ฐฉํฅ ์ฐ์ ์์๋ฅผ ์ ์ฅํฉ๋๋ค.
- move()
4๊ฐ์ ์์ด๋ค์ด ์์ง์ผ์ ์๋ ์์น๋ก ์ด๋ํฉ๋๋ค. ๋ง์ฝ ๋์๊ฐ ์๋ ์ฅ์๊ฐ ์๋ค๋ฉด, ๊ฐ๊น์ด ์์ ์ ๋์๋ก ์ด๋ํฉ๋๋ค.
1, 2, 3, 4 ์์๋ก ์ด๋์ ํ๋ ๋์ค, ํด๋น ์์น์ ์ด๋ฏธ ์ด๋๋ ์์ด๊ฐ ์๋ค๋ฉด ์ด์ ์ ์ด๋๋๋ ์์ด์๊ฒ ์ก์๋จนํ๋๋ค.
( 1~4์์ผ๋ก ์ด๋์ํค๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค์ด์ค๋ ์์ด๋ ์ด์ ์์ด๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ์ ์๋ฐ์ ์์ต๋๋ค. )
- nextTime()
์์ด๋ฅผ ์ด๋์ํจ ํ, ์์ด๋ค์ ๋์์ ๋จ์์๊ฐ์ ๊ฐฑ์ ํ์ฌ ์ค๋๋ค.
์ด๋ฌํ ์์ ๋ค์ ๋ฐ๋ณตํ๋ฉฐ 1๋ฒ ์์ด๋ง ๋จ์ ์๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
[์ ๋ต ์ฝ๋]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
class Shark {
int x;
int y;
Shark(int x, int y) {
this.x = x;
this.y = y;
}
}
// 1, 2, 3, 4๋ ๊ฐ๊ฐ ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ
public class Main {
public static int N; // N*N ๋ณด๋
public static int M; // M๊ฐ์ ์์ด
public static int k; // K๋ฒ ์ด๋!
public static int start[]; // ๊ฐ ์์ด์ ์์ ๋ฐฉํฅ
public static int priority[][][];
public static int dx[] = {0, -1, 1, 0, 0};
public static int dy[] = {0, 0, 0, -1, 1};
public static Shark shark[]; // ์์ด๋ค์ ์์น
public static int sharkNum[][]; // ๋์ ๋ฟ๋ฆฐ ์์ด
public static int timeLeft[][]; // ๋จ์ ์๊ฐ
public static int time = 0;
public static int cnt = 0;
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());
k = Integer.parseInt(st.nextToken());
cnt = M;
start = new int[M + 1];
shark = new Shark[M + 1];
priority = new int[M + 1][5][5];
sharkNum = new int[N][N];
timeLeft = new int[N][N];
for(int i=0;i<N;i++) {
st = new StringTokenizer(br.readLine());
for(int j=0;j<N;j++) {
int num = Integer.parseInt(st.nextToken());
if(num > 0) {
shark[num] = new Shark(i,j);
sharkNum[i][j] = num;
timeLeft[i][j] = k;
}
}
}
st = new StringTokenizer(br.readLine());
for(int i=1;i<=M;i++) {
start[i] = Integer.parseInt(st.nextToken());
}
// M๊ฐ์ ์์ด ์ฐ์ ์์ ๋ค ๋ฃ์
for(int i=1;i<=M;i++) {
for(int j=1;j<=4;j++) {
st = new StringTokenizer(br.readLine());
for(int k=1;k<=4;k++) {
priority[i][j][k] = Integer.parseInt(st.nextToken());
}
}
}
while(time < 1000) {
move(); // 4๊ฐ์ ์์ด๋ฅผ ์ด๋์ํด
nextTime();
time++;
if(cnt == 1) {
System.out.println(time);
System.exit(0);
}
}
System.out.println(-1);
}
public static void move() {
// 4๊ฐ์ ์์ด๋ฅผ ์ด๋์ํด
for(int i=1;i<=M;i++) {
// i๋ฒ์งธ ์์ด ์ด๋
boolean isFind = false;
if(shark[i] != null) {
int now = start[i]; // ํ์ฌ ์์ด๊ฐ ๋ณด๊ณ ์๋ ๋ฐฉํฅ
for(int j=1;j<=4;j++) {
int next = priority[i][now][j];
int nextX = shark[i].x + dx[next];
int nextY = shark[i].y + dy[next];
if(!checkOut(nextX, nextY) && sharkNum[nextX][nextY] == 0) {
// ๊ฒน์น๋ ์์ด ์ฃฝ์ด๊ธฐ
if(outShark(i, nextX, nextY)) {
shark[i] = null;
cnt--;
} else {
start[i] = next;
shark[i] = new Shark(nextX, nextY);
}
isFind = true;
break;
}
}
// ์์ ์ด ๋์ ๋ฟ๋ฆฐ ๊ณณ์ผ๋ก ๋์๊ฐ๊ธฐ
if(!isFind) {
for(int j=1;j<=4;j++) {
int next = priority[i][now][j];
int nextX = shark[i].x + dx[next];
int nextY = shark[i].y + dy[next];
if(!checkOut(nextX, nextY) && sharkNum[nextX][nextY] == i) {
start[i] = next;
shark[i] = new Shark(nextX, nextY);
break;
}
}
}
}
}
}
public static boolean checkOut(int x, int y) {
if(x < 0 || x >= N || y < 0 || y >= N) {
return true;
}
return false;
}
public static void nextTime() {
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
if(timeLeft[i][j] == 1) {
timeLeft[i][j] = 0;
sharkNum[i][j] = 0;
}
if(timeLeft[i][j] > 1) {
timeLeft[i][j] = timeLeft[i][j] - 1;
}
}
}
for(int i=1;i<=M;i++) {
if(shark[i] == null) {
continue;
}
int x = shark[i].x;
int y = shark[i].y;
sharkNum[x][y] = i;
timeLeft[x][y] = k;
}
}
public static boolean outShark(int num, int x, int y) {
for(int i=1;i<num;i++) {
if(shark[i] != null && shark[i].x == x && shark[i].y == y) {
return true;
}
}
return false;
}
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฐฑ์ค 2461๋ฒ - ๋ํ ์ ์ (0) | 2022.06.05 |
---|---|
[Java] ๋ฐฑ์ค 2564๋ฒ - ๊ฒฝ๋น์ (0) | 2022.06.05 |
[Java] ๋ฐฑ์ค 2056๋ฒ -์์ (0) | 2022.06.05 |
[Java] ๋ฐฑ์ค 1516๋ฒ - ๊ฒ์ ๊ฐ๋ฐ (1) | 2022.05.29 |
[Java] ๋ฐฑ์ค 1725๋ฒ - ํ์คํ ๊ทธ๋จ (0) | 2022.05.29 |
- Total
- Today
- Yesterday
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ๋ฐฑ์ค javascript
- ๋ฐฑ์ค node.js
- JavaScript
- ํฌํฌ์ธํฐ
- ํ๋กํผํฐ
- ์ด์์ฒด์
- ์ฝ๋ฉํ ์คํธ
- ๋ ์์ปฌ ํ๊ฒฝ
- ๋ฐฑ์ค
- ์ ์ญ ๋ณ์
- map
- http
- ํ๋กํ ์ฝ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ์๋ฐ
- TDD
- git
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋คํธ์ํฌ
- ์๊ณ ๋ฆฌ์ฆ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ๋์์ธ ํจํด
- ์นด์นด์ค ์ธํด
- ์ด๋ถํ์
- fp
- ์๋ฐ์คํฌ๋ฆฝํธ
- Baekjoon
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |