반응형
https://www.codetree.ai/training-field/frequent-problems/problems/max-sum-of-tetris-block
테트리스 블럭 안의 합 최대화 하기 문제 풀이는 BOJ 14500 : 테트로미노와 같다.
#include <stdio.h>
#define MAX (500 +50)
int T;
int N, M;
int MAP[MAX][MAX];
int BLOCK[19][4][4] =
{
{
{ 1, 1, 1, 1 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 }
},
{
{ 1, 1, 0, 0 },
{ 1, 1, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 1, 1, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 1, 1, 0 },
{ 1, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 1, 0, 0 },
{ 0, 1, 0, 0 },
{ 0, 1, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 0, 1, 0 },
{ 1, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 1, 0, 0 },
{ 0, 1, 0, 0 },
{ 1, 1, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 0, 0, 0 },
{ 1, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 1, 0, 0 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 1, 1, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 0, 0, 0 },
{ 1, 1, 0, 0 },
{ 0, 1, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 1, 1, 0 },
{ 1, 1, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 1, 0, 0 },
{ 1, 1, 0, 0 },
{ 1, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 1, 0, 0 },
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 1, 1, 0 },
{ 0, 1, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 1, 0, 0 },
{ 1, 1, 0, 0 },
{ 0, 1, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 1, 0, 0 },
{ 1, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 1, 0, 0, 0 },
{ 1, 1, 0, 0 },
{ 1, 0, 0, 0 },
{ 0, 0, 0, 0 }
},
};
void input()
{
scanf("%d %d", &N, &M);
for (int r = 0; r < MAX; r++)
for (int c = 0; c < MAX; c++)
MAP[r][c] = 0;
for (int r = 0; r < N; r++)
for (int c = 0; c < M; c++)
scanf("%d", &MAP[r][c]);
}
void output()
{
for (int r = 0; r < N; r++)
{
for (int c = 0; c < M; c++)
printf("%d ", MAP[r][c]);
putchar('\n');
}
putchar('\n');
}
int scan(int b, int r, int c)
{
int sum = 0;
for (int dr = 0; dr < 4; dr++)
for (int dc = 0; dc < 4; dc++)
sum += MAP[r + dr][c + dc] * BLOCK[b][dr][dc];
return sum;
}
int main(void)
{
// scanf("%d", &T);
T = 1;
for (int tc = 1; tc <= T; tc++)
{
int max, tmp;
input();
tmp = max = 0;
for (int r = 0; r < N; r++)
{
for (int c = 0; c < M; c++)
{
for (int k = 0; k < 19; k++)
{
tmp = scan(k, r, c);
if (max < tmp) max = tmp;
}
}
}
printf("%d\n", max);
}
return 0;
}
반응형
'알고리즘 > [ADV] 삼성 SW 역량 테스트 A형' 카테고리의 다른 글
[코드트리] 자율주행 자동차 (삼성 SW 역량테스트 2017 상반기 오후 1번) (1) | 2024.06.06 |
---|---|
[코드트리] 외주 수익 최대화하기 (삼성 SW 역량테스트 2017 상반기 오전 2번) (0) | 2024.06.06 |
[코드트리] 2048 게임 (삼성 SW 역량테스트 2016 하반기 2번 문제) (0) | 2024.06.06 |
[코드트리] 정육면체 굴리기 (삼성 SW 역량테스트 2016 하반기 1번 문제) (1) | 2024.06.05 |
[코드트리] 2개의 사탕 (삼성 SW 역량테스트 2015 하반기 2번 문제) (1) | 2024.06.05 |
댓글