백준 4920 테트리스 게임
문제 출처 :
https://www.acmicpc.net/problem/4920
테트리스는 아래와 같은 5가지 조각으로 이루어져 있다.
N*N 정수 표가 주어졌을때 해당 조각을 이용해 얻을 수 있는 정수 합중 가장 큰 것을 출력하는 문제이다. 첫번째 조각은 90도로 회전했을때 나올 수 있는 가지수가 2개이고, 두번째 조각도 2개, 세번째 네번째는 4개 다섯번째는 1개로 총 13개이다. 해당조각이 N*N 정수표에 들어 갈 수 있는지 완전탐색으로 확인하는 방법으로 해결할 수 있다.소스코드 :
#include <bits/stdc++.h>
using namespace std;
int dx[13][4] = {{0,1,2,3}, {0,0,0,0}, {0,1,1,2}, {0,0,-1,-1}, {0,1,2,2}, {0,0,0,-1}, {0,0,1,2}, {0,1,0,0}, {0,1,1,1}, {0,-1,0,1}, {0,0,0,1}, {0,-1,1,0}, {0,1,0,1}};
int dy[13][4] = {{0,0,0,0}, {0,-1,-2,-3}, {0,0,-1,-1}, {0,-1,-1,-2}, {0,0,0,-1}, {0,-1,-2,-2}, {0,-1,-1,-1}, {0,0,-1,-2}, {0,1,0,-1}, {0,-1,-1,-1}, {0,-1,-2,-1}, {0,0,0,-1}, {0,0,-1,-1}};
int main(){
// freopen("Input.txt", "r", stdin);
int N,score,nx,ny;
vector<int> result;
while(1){
cin>>N;
if(N == 0)break;
vector<vector<int>> scores(N,vector<int>(N));
for(int i =0;i<N;i++){
for(int j =0;j<N;j++){
cin>>scores[i][j];
}
}
score = INT_MIN;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
for(int y=0;y<13;y++){
bool flag = true;
int temp=0;
for(int k=0;k<4;k++){
nx = i+dx[y][k];
ny = j+dy[y][k];
if(nx>=0 && nx<N && ny>=0 && ny<N){
temp+=scores[nx][ny];
}
else{
flag = false;
break;
}
}
if(flag) score = max(score,temp);
}
}
}
result.push_back(score);
}
for(int i = 0; i<result.size(); i++){
cout<<i+1<<". "<<result[i]<<endl;
}
return 0;
}
Author And Source
이 문제에 관하여(백준 4920 테트리스 게임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gkwlsdn95/백준-4920-테트리스-게임저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)