๋ฐ์ํ
๋ฌธ์ (Gold 5)
https://www.acmicpc.net/problem/2174
ํ์ด
์ขํ๊ณ๋ง ์ ๊ฒฝ์ฐ๋ฉด ์ด๋ ต์ง ์์๋ ๋ฌธ์ !
๋์ ๊ฒฝ์ฐ, ์ข์๋จ๋ถํฐ (0,0) ์ฐํ๋จ์ด(B-1,A-1)๊ฐ ๋๋๋ก ์ขํ๋ฅผ ์ค์ ํ์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์! ์ ๋ ฅ ๋ํ x์ถ ์ขํ๋ถํฐ ์ ๋ ฅ๋๋ฏ๋ก ๋ฐ๋ก [x][y]์ด๋ ๊ฒ ์ ์ฅํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ค.
๋ชจ๋ ์ฝ๋์์ A, B, X, Y, I, J์ ํท๊ฐ๋ฆฌ์ง ์๋๋ก ์ ์ํ์!
์ฝ๋
๋๋ณด๊ธฐ
package simulation;
import java.util.*;
import java.io.*;
public class BOJ_2174_๋ก๋ด์๋ฎฌ๋ ์ด์
{
static int[] di = {-1, 0 , 1, 0}; // N,W,S,E > ์๊ณ ๋ฐ๋ ๋ฐฉํฅ
static int[] dj = {0, -1 , 0, 1}; // N,W,S,E > ์๊ณ ๋ฐ๋ ๋ฐฉํฅ
static int A, B;
static int N, M;
static int[][] robots;
static int[][] isThere;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
robots = new int[N][3];
isThere = new int[B][A];
for(int i =0 ; i < N; i ++){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken())-1; // J์ ๊ฐ์ผ๋, 0๋ถํฐ ์์ํ๋ ์ขํ๊ณ๋ฅผ ์ํด -1
int y = B-Integer.parseInt(st.nextToken()); // ๋ฌธ์ ์ ๋ฐ๋๋ก y๋ฅผ ์ค์ ํ๊ธฐ ์ํด, ์ฃผ์ด์ง ๋์ด์์ ์
๋ ฅ์ ๋บ ๊ฐ์ ์ต์ข
I ์ขํ๋ก ์ค์
int d = 0;
switch (st.nextToken().charAt(0)){
case 'N': d = 0; break;
case 'W': d = 1; break;
case 'S': d = 2; break;
case 'E': d = 3; break;
}
robots[i] = new int[]{y, x, d};
isThere[y][x] = i+1; // Map์์ robot์ ์์น ์ค์
}
for(int i = 0 ; i < M ; i++){
st = new StringTokenizer(br.readLine());
int robot = Integer.parseInt(st.nextToken())-1;
char inst = st.nextToken().charAt(0);
int cnt = Integer.parseInt(st.nextToken());
for(int j =0 ; j < cnt ; j++) {
switch (inst) {
case 'L': {
robots[robot][2] = (robots[robot][2] + 1) % 4; // ์๊ณ ๋ฐ๋ ๋ฐฉํฅ
break;
}
case 'R': {
robots[robot][2] = (robots[robot][2] - 1)<0 ? 3:(robots[robot][2] - 1); // ์๊ณ ๋ฐฉํฅ
break;
}
case 'F': {
int ni = robots[robot][0] + di[robots[robot][2]];
int nj = robots[robot][1] + dj[robots[robot][2]];
if(0<=ni&&ni<B && 0<=nj&&nj<A){
if(isThere[ni][nj] == 0){ // ์ ์์ ์ธ ๋ช
๋ น ์ํ
isThere[robots[robot][0]][robots[robot][1]] = 0;
isThere[ni][nj] = robot+1;
robots[robot][0] = ni;
robots[robot][1] = nj;
} else if(isThere[ni][nj] != robot+1){ // ๋ก๋ด๊ณผ ์ถฉ๋ํ๋ฉด!
System.out.printf("Robot %d crashes into robot %d", robot+1, isThere[ni][nj]);
return;
}
} else{ // ๋ฒฝ์ ๋ฟ์ผ๋ฉด!
System.out.printf("Robot %d crashes into the wall", robot+1);
return;
}
break;
}
}
}
}
System.out.println("OK");
}
}
์ ์ถ
1st Try: Left/Right ๋ช ๋ น ์ํ ๋ฐ๋๋ก
2nd Try: ๋ก๋ด ์ ๋ ฅ ๋ฐ์ ์, for๋ฌธ์ N๋ฒ์ด ์๋ M๋ฒ ๋๋ฆผ
๋ฐ์ํ
'๐ ์๊ณ ๋ฆฌ์ฆ > Simulation' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 20055๋ฒ: ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด( Java ) (0) | 2022.04.14 |
---|---|
[๋ฐฑ์ค] 16918๋ฒ: ๋ด๋ฒ๋งจ (JAVA) (0) | 2022.03.29 |
[๋ฐฑ์ค] 2933๋ฒ / 18500๋ฒ: ๋ฏธ๋ค๋ 1, 2 (JAVA) (0) | 2022.03.25 |