## 접근
1. 문제에서 준 조건 두 가지를 이용한다.
- 기둥은 바닥 위에 있거나 보의 한쪽 끝 부분 위에 있거나, 또는 다른 기둥 위에 있어야 합니다.
- 보는 한쪽 끝 부분이 기둥 위에 있거나, 또는 양쪽 끝 부분이 다른 보와 동시에 연결되어 있어야 합니다.
2. 문제에서 제거 및 추가에 대해서, 특정한 맵에 반영하고 위의 조건 두 가지를 만족하는지 확인한다.
## 시행착오
1. 맵을 2차원 배열이 아닌, 기둥과 보를 각각 마크할 수 있는 3차원 배열을 해야한다. 왜냐면, 같은 위치에(x, y) 보와 배열이 설치될 수 있다.
2. if문과 else문 사용 시, 주의해야 한다. continue, break 사용 시에 주의해야 한다. 이것때문에 계속 틀렸었다.
## 해설코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
import java.util.*;
import java.io.*;
import java.lang.*;
class Solution {
class Item{
int x, y, a;
Item(int x, int y, int a){
this.x = x;
this.y = y;
this.a = a;
}
}
boolean arrCheck(int[][][] map, int n){
boolean result = true;
for(int i = 0; i < map.length; i++){
for(int j = 0; j < map[i].length; j++){
if(map[i][j][0] == 1){
if(j == 0);
else if(i - 1 >= 0 && map[i - 1][j][1] == 1);
else if(map[i][j][1] == 1);
else if(j - 1 >= 0 && map[i][j - 1][0] == 1);
else return false;
}
if(map[i][j][1] == 1){
if(j - 1 >= 0 && map[i][j - 1][0] == 1);
else if(i + 1 <= n && j - 1 >= 0 && map[i + 1][j - 1][0] == 1);
else if(i - 1 >= 0 && i + 1 <= n && map[i - 1][j][1] == 1 && map[i + 1][j][1] == 1);
else return false;
}
}
}
return result;
}
public int[][] solution(int n, int[][] build_frame) {
int[][] answer;
int[][][] map = new int[n + 1][n + 1][2];
ArrayList<Item> aList = new ArrayList<>();
for(int i = 0; i < map.length; i++){
for(int j = 0; j < map[i].length; j++){
for(int k = 0; k < map[i][j].length; k++){
map[i][j][k] = 0;
}
}
}
for(int i = 0; i < build_frame.length; i++){
int x = build_frame[i][0];
int y = build_frame[i][1];
int a = build_frame[i][2];
int b = build_frame[i][3];
if(b == 1){
map[x][y][a] = 1;
if(arrCheck(map, n) == false) map[x][y][a] = 0;
}
else{
map[x][y][a] = 0;
if(arrCheck(map, n) == false) map[x][y][a] = 1;
}
}
for(int i = 0; i <= n; i++){
for(int j = 0; j <= n; j++){
for(int k = 0; k < 2; k++){
if(map[i][j][k] == 1)
aList.add(new Item(i, j, k));
}
}
}
answer = new int[aList.size()][3];
for(int i = 0; i < aList.size(); i++){
Item item = aList.get(i);
answer[i][0] = item.x;
answer[i][1] = item.y;
answer[i][2] = item.a;
}
return answer;
}
}
|
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2019 KAKAO BLIND RECRUITMENT] 블록 게임(Java, 간단한 코드) (0) | 2020.08.27 |
---|---|
[2019 KAKAO BLIND RECRUITMENT] 길 찾기 게임(Java, 간단한 코드) (0) | 2020.08.27 |
[2019 KAKAO BLIND RECRUITMENT] 무지의 먹방 라이브(Java) (0) | 2020.08.27 |
[2020 KAKAO BLIND RECRUITMENT] 가사검색(Trie, Java, 효율성, 간단한 코드) (0) | 2020.08.24 |
[2018 KAKAO BLIND RECRUITMENT] [3차] n진수 게임 (0) | 2020.01.26 |