01-15 00:15
벤치마킹
Notice
Recent Posts
Recent Comments
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 영통역소고기
- 주차넉넉
- 영통외식
- 가족소고기외식
- 고마워다음
- 푸르지오포레피스
- 양양솔비치아침
- 결항전문
- 중학교입학수학문제
- 종이캐리어
- 당근마켓중고차
- 커피
- 싱가폴중학교수학문제
- 커피쏟음
- 편도수술
- 양양솔비치 뷔페
- 사진문자추출하기
- 결항
- 양양솔비치세프스키친
- 홍시스무디
- 검색완료
- 사진에서 글자추출
- python#
- 에어아시아
- 파이썬
- 아이혼자다녀옴
- 양양솔비치조식
- DFS
- 사진문자추출
- 영통칠프로칠백식당
Archives
- Today
- Total
너와나의 관심사
백준 테트로미노 본문

백준 테트로미노 문제에서 결국 DFS 로 ㅜ 자 글자 말고 DFS로 해결
여기서 가장 어려웠던부분은 DFS 짜로 ㅜ 자 글자 돌려서 돌려 보는거
그리고 그걸 각각의 dx / dy 배열로 만들어서 정리하는것이 중요
int X, Y;
int data[501][501];
bool visit[501][501] = { false, };
int dy[4] = { 1, -1, 0, 0 };
int dx[4] = { 0, 0, 1, -1 };
// ㅓ ㅗ ㅏ ㅜ 순서대로 //
int sx[4][4] = { { 0, 0, -1 }, { 0, -1, 1 }, { 0, 0, 1 }, { 0, -1, 1 } };
int sy[4][3] = { { 1, 2, 1 }, { 1, 0, 0 }, { 1, 2, 1 }, { 1, 1, 1 } };
int ans = 0;
bool chk(int x, int y){
if (x < 0 || x >= X || y < 0 || y >= Y)
return false;
return true;
}
void recursive(int x, int y, int n, int total){
if (n >= 4){
ans = max(ans, total);
return;
}
for (int i = 0; i < 4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if (chk(nx, ny)){
if (!visit[ny][nx]){
visit[ny][nx] = true;
recursive(nx, ny, n+1, total + data[ny][nx]);
visit[ny][nx] = false;
}
}
}
}
void other(int x, int y){
for (int i = 0; i < 4; i++){
int total = data[y][x];
bool chk_flag = false;
for(int k = 0; k < 3; k++){
int nx = x + sx[i][k];
int ny = y + sy[i][k];
if (!chk(x, y)){
chk_flag = true;
break;
}
total += data[ny][nx];
}
if (chk_flag) continue;
ans = max(ans, total);
}
}
int main() {
int TC = 1;
freopen("input16.txt", "r", stdin); setbuf(stdout, NULL); cin >> TC;
while (TC--)
{
ans = 0;
cin >> Y >> X;
for (int i = 0; i < Y; i++)
for (int j = 0; j < X; j++)
cin >> data[i][j], visit[i][j] = false;
for (int i = 0; i < Y; i++){
for (int j = 0; j < X; j++){
visit[i][j] = true;
recursive(j, i, 1, data[i][j]);
other(j, i);
visit[i][j] = false;
}
}
cout << ans << endl;
}
return 0;
}
Comments