https://www.acmicpc.net/problem/17837
λ¬Έμ
μ¬νμ΄λ μ£Όλ³μ μ΄ν΄λ³΄λ μ€ μ²΄μ€νκ³Ό λ§μ μ΄μ©ν΄μ μλ‘μ΄ κ²μμ λ§λ€κΈ°λ‘ νλ€. μλ‘μ΄ κ²μμ ν¬κΈ°κ° N×NμΈ μ²΄μ€νμμ μ§νλκ³ , μ¬μ©νλ λ§μ κ°μλ Kκ°μ΄λ€. λ§μ μνλͺ¨μμ΄κ³ , νλμ λ§ μμ λ€λ₯Έ λ§μ μ¬λ¦΄ μ μλ€. 체μ€νμ κ° μΉΈμ ν°μ, λΉ¨κ°μ, νλμ μ€ νλλ‘ μμΉ λμ΄μλ€.
κ²μμ 체μ€ν μμ λ§ Kκ°λ₯Ό λκ³ μμνλ€. λ§μ 1λ²λΆν° Kλ²κΉμ§ λ²νΈκ° λ§€κ²¨μ Έ μκ³ , μ΄λ λ°©ν₯λ 미리 μ ν΄μ Έ μλ€. μ΄λ λ°©ν₯μ μ, μλ, μΌμͺ½, μ€λ₯Έμͺ½ 4κ°μ§ μ€ νλμ΄λ€.
ν΄ ν λ²μ 1λ² λ§λΆν° Kλ² λ§κΉμ§ μμλλ‘ μ΄λμν€λ κ²μ΄λ€. ν λ§μ΄ μ΄λν λ μμ μ¬λ €μ Έ μλ λ§λ ν¨κ» μ΄λνλ€. λ§μ μ΄λ λ°©ν₯μ μλ μΉΈμ λ°λΌμ λ§μ μ΄λμ΄ λ€λ₯΄λ©° μλμ κ°λ€. ν΄μ΄ μ§νλλ μ€μ λ§μ΄ 4κ° μ΄μ μμ΄λ μκ° κ²μμ΄ μ’ λ£λλ€.
- Aλ² λ§μ΄ μ΄λνλ €λ μΉΈμ΄
- ν°μμΈ κ²½μ°μλ κ·Έ μΉΈμΌλ‘ μ΄λνλ€. μ΄λνλ €λ μΉΈμ λ§μ΄ μ΄λ―Έ μλ κ²½μ°μλ κ°μ₯ μμ Aλ² λ§μ μ¬λ €λλλ€.
- Aλ² λ§μ μμ λ€λ₯Έ λ§μ΄ μλ κ²½μ°μλ Aλ² λ§κ³Ό μμ μλ λͺ¨λ λ§μ΄ μ΄λνλ€.
- μλ₯Ό λ€μ΄, A, B, Cλ‘ μμ¬μκ³ , μ΄λνλ €λ μΉΈμ D, Eκ° μλ κ²½μ°μλ Aλ² λ§μ΄ μ΄λν νμλ D, E, A, B, Cκ° λλ€.
- λΉ¨κ°μμΈ κ²½μ°μλ μ΄λν νμ Aλ² λ§κ³Ό κ·Έ μμ μλ λͺ¨λ λ§μ μμ¬μλ μμλ₯Ό λ°λλ‘ λ°κΎΌλ€.
- A, B, Cκ° μ΄λνκ³ , μ΄λνλ €λ μΉΈμ λ§μ΄ μλ κ²½μ°μλ C, B, Aκ° λλ€.
- A, D, F, Gκ° μ΄λνκ³ , μ΄λνλ €λ μΉΈμ λ§μ΄ E, C, Bλ‘ μλ κ²½μ°μλ E, C, B, G, F, D, Aκ° λλ€.
- νλμμΈ κ²½μ°μλ Aλ² λ§μ μ΄λ λ°©ν₯μ λ°λλ‘ νκ³ ν μΉΈ μ΄λνλ€. λ°©ν₯μ λ°λλ‘ λ°κΎΌ νμ μ΄λνλ €λ μΉΈμ΄ νλμμΈ κ²½μ°μλ μ΄λνμ§ μκ³ κ°λ§ν μλλ€.
- 체μ€νμ λ²μ΄λλ κ²½μ°μλ νλμκ³Ό κ°μ κ²½μ°μ΄λ€.
- ν°μμΈ κ²½μ°μλ κ·Έ μΉΈμΌλ‘ μ΄λνλ€. μ΄λνλ €λ μΉΈμ λ§μ΄ μ΄λ―Έ μλ κ²½μ°μλ κ°μ₯ μμ Aλ² λ§μ μ¬λ €λλλ€.
λ€μμ ν¬κΈ°κ° 4×4μΈ μ²΄μ€ν μμ λ§μ΄ 4κ° μλ κ²½μ°μ΄λ€.
첫 λ²μ§Έ ν΄μ λ€μκ³Ό κ°μ΄ μ§νλλ€.
λ λ²μ§Έ ν΄μ λ€μκ³Ό κ°μ΄ μ§νλλ€.
체μ€νμ ν¬κΈ°μ λ§μ μμΉ, μ΄λ λ°©ν₯μ΄ λͺ¨λ μ£Όμ΄μ‘μ λ, κ²μμ΄ μ’ λ£λλ ν΄μ λ²νΈλ₯Ό ꡬν΄λ³΄μ.
μ λ ₯
첫째 μ€μ 체μ€νμ ν¬κΈ° N, λ§μ κ°μ Kκ° μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μ 체μ€νμ μ λ³΄κ° μ£Όμ΄μ§λ€. 체μ€νμ μ 보λ μ μλ‘ μ΄λ£¨μ΄μ Έ μκ³ , κ° μ μλ μΉΈμ μμ μλ―Ένλ€. 0μ ν°μ, 1μ λΉ¨κ°μ, 2λ νλμμ΄λ€.
λ€μ Kκ°μ μ€μ λ§μ μ λ³΄κ° 1λ² λ§λΆν° μμλλ‘ μ£Όμ΄μ§λ€. λ§μ μ 보λ μΈ κ°μ μ μλ‘ μ΄λ£¨μ΄μ Έ μκ³ , μμλλ‘ ν, μ΄μ λ²νΈ, μ΄λ λ°©ν₯μ΄λ€. νκ³Ό μ΄μ λ²νΈλ 1λΆν° μμνκ³ , μ΄λ λ°©ν₯μ 4λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄κ³ 1λΆν° μμλλ‘ →, ←, ↑, ↓μ μλ―Έλ₯Ό κ°λλ€.
κ°μ μΉΈμ λ§μ΄ λ κ° μ΄μ μλ κ²½μ°λ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μλλ€.
μΆλ ₯
κ²μμ΄ μ’ λ£λλ ν΄μ λ²νΈλ₯Ό μΆλ ₯νλ€. κ·Έ κ°μ΄ 1,000λ³΄λ€ ν¬κ±°λ μ λλ‘ κ²μμ΄ μ’ λ£λμ§ μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
μ ν
- $4 ≤ N ≤ 12$
- $4 ≤ K ≤ 10$
λ¬Έμ νμ΄
1) 체μ€νμ μμ μ 보μ λ§μ μ 보λ₯Ό λΆλ¦¬
int[][] color
: μμ μ 보piece[] pieces
: κ° λ§μ λ²νΈλ³ μ 보List<Integer>[][] map
: 체μ€ν μμ λ§μ λ²νΈ
2) κ²μ μμ game()
1000μ΄ μ΄κ³Όλλ©΄ μ’ λ£ π -1 μΆλ ₯
λ§ μμλλ‘ μ΄λ μμ π move(i)
3) λ§ μ΄λ move(int i)
iλ² λ§μ μ΄λ λ°©ν₯λλ‘ μ΄λ
λ€μ μΉΈμ΄ λ²μλ₯Ό λ²μ΄λκ±°λ, μμ΄ νλμμ΄λΌλ©΄
π λ°©ν₯μ λ°λλ‘ν΄μ λ€μ μ΄λ
β
λ°λ λ°©ν₯λ νλμμ΄κ±°λ, λ²μλ₯Ό λ²μ΄λλ©΄ μ΄λ β
κ·Έλ μ§ μλ€λ©΄ βΌ
4) μμλ³λ‘ μ΄λ moveByColor(int num, piece now, int nx, int ny)
- νμμ → map[nx][ny]μ numλ² λ§λΆν° κ·Έ μμ λ§λ€μ μμλλ‘ μκΈ°
- λΉ¨κ°μ → map[nx][ny]μ 맨 μμ λ§λΆν° numλ² λ§κΉμ§ μμμΌλ‘ μκΈ°
heightOfNow
: now λ§(numλ² λ§)μ λμ΄
4-1) νμμ μΉΈ
map[now.x][now.y]μμ heightOfNow λΆν° λ§μ§λ§ λ§λ€μ map[nx][ny] μλ‘ μ΄λ
4-2) λΉ¨κ°μ μΉΈ
map[now.x][now.y]μμ λ§μ§λ§ λ§λΆν° heightOfNow λ§κΉμ§ map[nx][ny] μλ‘ μ΄λ
5) μ’ λ£ μ¬λΆ
map[nx][ny]
μ ν¬κΈ°κ° 4μ΄μμ΄λ©΄, μ’
λ£~!!!
μ½λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main_BOJ_17838_μλ‘μ΄_κ²μ_2 {
static class piece {
int x, y, dir;
public piece(int x, int y, int dir) {
this.x = x;
this.y = y;
this.dir = dir;
}
}
static int N, K;
static int[][] color;
static List<Integer>[][] map;
static piece[] pieces;
static int[] dx = {0, 0, -1, 1};
static int[] dy = {1, -1, 0, 0};
static final int WHITE = 0, RED = 1, BLUE = 2;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
N = Integer.parseInt(stringTokenizer.nextToken());
K = Integer.parseInt(stringTokenizer.nextToken());
map = new List[N][N];
pieces = new piece[K];
color = new int[N][N];
for (int i = 0; i < N; i++) {
stringTokenizer = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
color[i][j] = Integer.parseInt(stringTokenizer.nextToken());
map[i][j] = new ArrayList<>();
}
}
for (int i = 0; i < K; i++) {
stringTokenizer = new StringTokenizer(br.readLine());
int x = Integer.parseInt(stringTokenizer.nextToken()) - 1;
int y = Integer.parseInt(stringTokenizer.nextToken()) - 1;
int d = Integer.parseInt(stringTokenizer.nextToken()) - 1;
pieces[i] = new piece(x, y, d);
map[x][y].add(i);
}
game();
}
private static void game() {
for (int time = 1; time <= 1000; time++) {
for (int i = 0; i < K; i++) {
if (move(i)) {
System.out.println(time);
return;
}
}
}
System.out.println(-1);
}
private static boolean move(int i) {
piece now = pieces[i];
int nx = now.x + dx[now.dir];
int ny = now.y + dy[now.dir];
if (nx < 0 || ny < 0 || N <= nx || N <= ny || color[nx][ny] == BLUE) {
changeDir(now);
nx = now.x + dx[now.dir];
ny = now.y + dy[now.dir];
}
if ((0 <= nx && nx < N) && (0 <= ny && ny < N) && color[nx][ny] != BLUE) {
moveByColor(i, now, nx, ny);
if(map[nx][ny].size() > 3) return true;
}
return false;
}
private static void moveByColor(int num, piece now, int nx, int ny) {
List<Integer> from = map[now.x][now.y];
List<Integer> to = map[nx][ny];
int heightOfNow = from.indexOf(num);
switch (color[nx][ny]) {
case WHITE:
for (int i = heightOfNow; i < from.size(); i++) {
int piece = from.get(i);
updateList(piece, nx, ny);
to.add(piece);
}
removePiece(from, from.size() - 1, heightOfNow);
break;
case RED:
for (int i = from.size() - 1; i >= heightOfNow; i--) {
int piece = from.get(i);
updateList(piece, nx, ny);
to.add(piece);
}
removePiece(from, from.size() - 1, heightOfNow);
break;
}
}
private static void removePiece(List<Integer> list, int top, int bottom) {
for (int i = top; i >= bottom; i--) {
list.remove(i);
}
}
private static void updateList(int piece, int nx, int ny) {
pieces[piece].x = nx;
pieces[piece].y = ny;
}
private static void changeDir(piece now) {
if(now.dir == 0) now.dir = 1;
else if(now.dir == 1) now.dir = 0;
else if(now.dir == 2) now.dir = 3;
else now.dir = 2;
}
}
'μκ³ λ¦¬μ¦ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ λ°±μ€ / BOJ 13460 ] κ΅¬μ¬ νμΆ 2 ( μλ° / JAVA ) (0) | 2022.03.06 |
---|---|
[ λ°±μ€ / BOJ 22861 ] ν΄λ μ 리 - large ( JAVA / μλ° ) (0) | 2022.02.22 |
[ λ°±μ€ / BOJ 21922 ] νλΆ μ°κ΅¬μ λ―Όμ ( μλ° / JAVA ) (0) | 2022.02.21 |
[ BOJ / λ°±μ€ 20165 ] μΈλ΄μ λλ―Έλ Έ μ₯μΈ νΈμ ( μλ° / JAVA ) (0) | 2022.02.21 |
[ BOJ / λ°±μ€ 5212 ] μ§κ΅¬ μ¨λν ( μλ° / JAVA ) (0) | 2022.02.15 |