Coding Test
백준 테트리스(3019)
댕발바닥
2024. 3. 10. 23:13
구현에 가까운 문제를 풀었다.
https://www.acmicpc.net/problem/3019
위 문제는 선택된 블록이 바닥에 높이를 정해줬다.
시작부터 끝라인까지 순회하면 현재 높이로부터 블록을 쌓았는데 이후 높이들이 맞는지 확인한다.
총 블록이 7개가 존재하여 블록 별로 필요한 높이를 case별로 배열로 정리해두고 해당 검사 루프를 돌린 후 검사에 통과하였을 경우 개수를 증가시켜줬다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
/**
* https://www.acmicpc.net/problem/3019
*/
public class Main {
static int[][][] blocks = {
{
{0},
{0, 0, 0, 0}
},
{
{0, 0}
},
{
{0, 0, 1},
{0, -1}
},
{
{0,-1,-1},
{0, 1}
},
{
{0,0,0},
{0, 1},
{0, -1, 0},
{0, -1}
},
{
{0, 0, 0},
{0, 0},
{0,1 ,1},
{0,-3}
},
{
{0, 0, 0},
{0, 3},
{0, 0, -1},
{0, 0}
}
};
public static void main(String[] args) throws IOException {
solution();
}
public static void solution() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int C = Integer.parseInt(st.nextToken());
int P = Integer.parseInt(st.nextToken());
int[] height = new int[C];
st = new StringTokenizer(br.readLine());
for (int i=0; i < C; i++) {
height[i] = Integer.parseInt(st.nextToken());
}
int sum = 0;
int[][] validate = blocks[P-1];
for (int i=0; i < validate.length; i++) {
int[] vcase = validate[i];
for (int w=0; w < C; w++) {
int max = w + vcase.length - 1;
if (max >= C) {
break;
}
int h = height[w];
boolean flag = true;
for (int k=0; k < vcase.length; k++) {
if (height[w+k] != h + vcase[k]) {
flag = false;
break;
}
}
if (flag) {
sum++;
}
}
}
System.out.println(sum);
}
}
결과