문제 풀이

 

 여기서 중요한 부분은 'ㅗ, ㅓ, ㅏ, ㅜ' 모양의 테트로미노를 해결하는 것입니다. 따라서 이를 for문으로 예외 처리 해주었습니다. 이외의 테트로미노는 한 번에 처리가 가능하기 때문에 함수로 선언하여 문제를 풀었습니다.

 

 

코드

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
 
using namespace std;
 
int n, m;
int ans;
int board[500][500];
bool isVisit[500][500];
int dx[] = { 00-11 };
int dy[] = { -1100 };
 
void ttr(int x, int y, int sum, int cnt) {
 
    if (cnt == 4)
    {
        if (sum > ans)
            ans = sum;
        return;
    }
 
    if (isVisit[x][y] == truereturn;
    
    if (x < 0 || x >= n || y < 0 || y >= m) return;
 
    isVisit[x][y] = true;
    
    for (int i = 0; i < 4; i++)
        ttr(x + dx[i], y + dy[i], sum + board[x][y], cnt + 1);
    
    isVisit[x][y] = false;
}
 
int main() {
    
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    ans = 0;
    cin >> n >> m;
 
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            cin >> board[i][j];
 
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            ttr(i, j, 00);
        
    for (int i = 1; i < n; i++)
    {
        for (int j = 0; j < m - 2; j++)
        {
            int sum = board[i][j] + board[i][j + 1+ board[i][j + 2+ board[i - 1][j + 1];
            if (sum > ans)
                ans = sum;
        }
    }
    for (int i = 1; i < n - 1; i++)
    {
        for (int j = 0; j < m - 1; j++)
        {
            int sum = board[i][j] + board[i][j + 1+ board[i + 1][j + 1+ board[i - 1][j + 1];
            if (sum > ans)
                ans = sum;
        }
    }
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < m - 2; j++)
        {
            int sum = board[i][j] + board[i][j + 1+ board[i][j + 2+ board[i + 1][j + 1];
            if (sum > ans)
                ans = sum;
        }
    }
    for (int i = 0; i < n - 2; i++)
    {
        for (int j = 0; j < m - 1; j++)
        {
            int sum = board[i][j] + board[i + 1][j] + board[i + 2][j] + board[i + 1][j + 1];
            if (sum > ans)
                ans = sum;
        }
    }
    cout << ans;
 
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5; text-decoration:none">Colored by Color Scripter

 

 

제출 결과

 

 

 

문제 출처

 

https://www.acmicpc.net/problem/14500

 

14500번: 테트로미노

폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 꼭짓점끼리 연결되어 있어야 한다. 즉, 변과 꼭짓점이 맞닿아있으면 안된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져

www.acmicpc.net

 

+ Recent posts