반응형
📖 문제
https://www.acmicpc.net/problem/3019
💡 풀이 방식
• 구현, 브루트포스
1. 블록 모양에 따라 올라와야 하는 바닥면의 높이를 저장한다.2. 바닥면에 대해 블록을 끝까지 내릴 수 있는지 반복문으로 검사한다.
⇒ 각 번호에 맞는 빈 공간 수를 뺐을 때 모두 같은 값이 나오면 놓을 수 있는 자리이다!! (참고)
🔺 코드
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
|
import java.util.*;
import java.io.*;
public class Main {
static int C,P;
static int[] map;
// 빈 공간 갯수만 세어 타일 저장
static int[][][] shape = {{{0}, {0,0,0,0}},
{{0,0}},
{{0,0,1}, {1,0}},
{{1,0,0}, {0,1}},
{{0,0,0}, {0,1}, {1,0,1}, {1,0}},
{{0,0,0}, {0,0}, {0,1,1}, {2,0}},
{{0,0,0}, {0,0}, {1,1,0}, {0,2}}
};
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(), " ");
C = Integer.parseInt(st.nextToken());
P = Integer.parseInt(st.nextToken()) -1; // 떨어뜨리는 블록 번호
map = new int[C];
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0 ; i < C ; i++) { // 열
map[i] = Integer.parseInt(st.nextToken());
}
for(int i = 0 ; i < shape[P].length ; i++) {
for(int j = 0 ; j < C - shape[P][i].length + 1 ; j++) {
int diff = map[j] - shape[P][i][0];
boolean ok = true; // 각 번호에 맞는 빈 공간 수를 뺐을 때 모두 같은 값이 나오면 놓을 수 있는 자리
for(int k = 1 ; k < shape[P][i].length ; k++) {
if(diff != map[j + k] - shape[P][i][k]) {
ok = false;
break;
}
}
if(ok)
cnt++;
}
}
System.out.println(cnt);
}
}
|
cs |
➕ 다른 풀이 방식
노가다,,
💦 어려웠던 점
- 회전을 어떻게 시키고, 얘를 일일이 어떻게 올려보는 경우의 수를 구하지?의 문제
🧐 새로 알게 된 내용
- 3차원 배열을 잘 활용해야겄다,,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 9944번: NxM 보드 완주하기 (0) | 2024.05.05 |
---|---|
[백준/JAVA] 16938번: 캠프 준비 (1) | 2024.05.02 |
[백준/JAVA] 16509번: 장군 (0) | 2024.04.30 |
[백준/JAVA] 15683번: 감시 (0) | 2024.04.30 |
[백준/JAVA] 1967번: 트리의 지름 (0) | 2024.04.30 |