구현에 가까운 문제를 풀었다.
https://www.acmicpc.net/problem/3019
3019번: 테트리스
테트리스는 C열 필드위에서 플레이하는 유명한 게임이다. 필드의 행의 수는 무한하다. 한 번 움직일 때, 아래와 같은 일곱가지 블록 중 하나를 필드에 떨어뜨릴 수 있다. 블록을 떨어뜨리기 전에
www.acmicpc.net
위 문제는 선택된 블록이 바닥에 높이를 정해줬다.
시작부터 끝라인까지 순회하면 현재 높이로부터 블록을 쌓았는데 이후 높이들이 맞는지 확인한다.
총 블록이 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);
}
}
결과
'Coding Test' 카테고리의 다른 글
백준 삼각 그래프(4883) (0) | 2024.03.12 |
---|---|
백준 스타트링크(5014) (0) | 2024.03.11 |
백준 RGB거리(1149) (0) | 2024.03.09 |
백준 계단(21600) (0) | 2024.03.09 |
백준 사격(31264) (0) | 2024.03.09 |